Add support for ExprKind::Let
This commit is contained in:
parent
2707103154
commit
457dc79a35
33
src/expr.rs
33
src/expr.rs
@ -132,7 +132,7 @@ pub(crate) fn format_expr(
|
|||||||
ast::ExprKind::Tup(ref items) => {
|
ast::ExprKind::Tup(ref items) => {
|
||||||
rewrite_tuple(context, items.iter(), expr.span, shape, items.len() == 1)
|
rewrite_tuple(context, items.iter(), expr.span, shape, items.len() == 1)
|
||||||
}
|
}
|
||||||
ast::ExprKind::Let(..) => None,
|
ast::ExprKind::Let(ref pat, ref expr, _span) => rewrite_let(context, shape, pat, expr),
|
||||||
ast::ExprKind::If(..)
|
ast::ExprKind::If(..)
|
||||||
| ast::ExprKind::ForLoop(..)
|
| ast::ExprKind::ForLoop(..)
|
||||||
| ast::ExprKind::Loop(..)
|
| ast::ExprKind::Loop(..)
|
||||||
@ -1834,6 +1834,37 @@ fn rewrite_tuple_in_visual_indent_style<'a, T: 'a + IntoOverflowableItem<'a>>(
|
|||||||
Some(format!("({list_str})"))
|
Some(format!("({list_str})"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn rewrite_let(
|
||||||
|
context: &RewriteContext<'_>,
|
||||||
|
shape: Shape,
|
||||||
|
pat: &ast::Pat,
|
||||||
|
expr: &ast::Expr,
|
||||||
|
) -> Option<String> {
|
||||||
|
let mut result = "let ".to_owned();
|
||||||
|
|
||||||
|
// 4 = "let ".len()
|
||||||
|
let pat_shape = shape.offset_left(4)?;
|
||||||
|
let pat_str = pat.rewrite(context, pat_shape)?;
|
||||||
|
result.push_str(&pat_str);
|
||||||
|
|
||||||
|
result.push_str(" =");
|
||||||
|
|
||||||
|
let comments_lo = context
|
||||||
|
.snippet_provider
|
||||||
|
.span_after(expr.span.with_lo(pat.span.hi()), "=");
|
||||||
|
let comments_span = mk_sp(comments_lo, expr.span.lo());
|
||||||
|
rewrite_assign_rhs_with_comments(
|
||||||
|
context,
|
||||||
|
result,
|
||||||
|
expr,
|
||||||
|
shape,
|
||||||
|
&RhsAssignKind::Expr(&expr.kind, expr.span),
|
||||||
|
RhsTactics::Default,
|
||||||
|
comments_span,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn rewrite_tuple<'a, T: 'a + IntoOverflowableItem<'a>>(
|
pub(crate) fn rewrite_tuple<'a, T: 'a + IntoOverflowableItem<'a>>(
|
||||||
context: &'a RewriteContext<'_>,
|
context: &'a RewriteContext<'_>,
|
||||||
items: impl Iterator<Item = &'a T>,
|
items: impl Iterator<Item = &'a T>,
|
||||||
|
16
tests/source/let_chains.rs
Normal file
16
tests/source/let_chains.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
fn main() {
|
||||||
|
if let x = x && x {}
|
||||||
|
|
||||||
|
if xxx && let x = x {}
|
||||||
|
|
||||||
|
if aaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaa && aaaaaaaaa && let Some(x) = xxxxxxxxxxxx && aaaaaaa && let None = aaaaaaaaaa {}
|
||||||
|
|
||||||
|
if aaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaa || aaaaaaaaa && let Some(x) = xxxxxxxxxxxx && aaaaaaa && let None = aaaaaaaaaa {}
|
||||||
|
|
||||||
|
if let Some(Struct { x:TS(1,2) }) = path::to::<_>(hehe)
|
||||||
|
&& let [Simple, people] = /* get ready */ create_universe(/* hi */ GreatPowers).initialize_badminton().populate_swamps() &&
|
||||||
|
let everybody = (Loops { hi /*hi*/ , ..loopy() }) || summons::triumphantly() { todo!() }
|
||||||
|
|
||||||
|
if let XXXXXXXXX { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyy, zzzzzzzzzzzzz} = xxxxxxx()
|
||||||
|
&& let Foo = bar() { todo!() }
|
||||||
|
}
|
@ -292,6 +292,9 @@ fn guards() {
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
if fooooooooooooooooooooo &&
|
if fooooooooooooooooooooo &&
|
||||||
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb || cccccccccccccccccccccccccccccccccccccccc) => {}
|
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb || cccccccccccccccccccccccccccccccccccccccc) => {}
|
||||||
|
Hi { friend } if let None = friend => {}
|
||||||
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa if let Some(foooooooooooooo) = hiiiiiiiiiiiiiii => {}
|
||||||
|
aaaaaaaaaaaaaaaaa if let Superman { powers: Some(goteem), .. } = all::get_random_being::<Super>() => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
41
tests/target/let_chains.rs
Normal file
41
tests/target/let_chains.rs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
fn main() {
|
||||||
|
if let x = x && x {}
|
||||||
|
|
||||||
|
if xxx && let x = x {}
|
||||||
|
|
||||||
|
if aaaaaaaaaaaaaaaaaaaaa
|
||||||
|
&& aaaaaaaaaaaaaaa
|
||||||
|
&& aaaaaaaaa
|
||||||
|
&& let Some(x) = xxxxxxxxxxxx
|
||||||
|
&& aaaaaaa
|
||||||
|
&& let None = aaaaaaaaaa
|
||||||
|
{}
|
||||||
|
|
||||||
|
if aaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaa
|
||||||
|
|| aaaaaaaaa && let Some(x) = xxxxxxxxxxxx && aaaaaaa && let None = aaaaaaaaaa
|
||||||
|
{}
|
||||||
|
|
||||||
|
if let Some(Struct { x: TS(1, 2) }) = path::to::<_>(hehe)
|
||||||
|
&& let [Simple, people] = /* get ready */
|
||||||
|
create_universe(/* hi */ GreatPowers)
|
||||||
|
.initialize_badminton()
|
||||||
|
.populate_swamps()
|
||||||
|
&& let everybody = (Loops {
|
||||||
|
hi, /*hi*/
|
||||||
|
..loopy()
|
||||||
|
})
|
||||||
|
|| summons::triumphantly()
|
||||||
|
{
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
if let XXXXXXXXX {
|
||||||
|
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
|
||||||
|
yyyyyyyyyyyyy,
|
||||||
|
zzzzzzzzzzzzz,
|
||||||
|
} = xxxxxxx()
|
||||||
|
&& let Foo = bar()
|
||||||
|
{
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
@ -317,6 +317,14 @@ fn guards() {
|
|||||||
if fooooooooooooooooooooo
|
if fooooooooooooooooooooo
|
||||||
&& (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
&& (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||||
|| cccccccccccccccccccccccccccccccccccccccc) => {}
|
|| cccccccccccccccccccccccccccccccccccccccc) => {}
|
||||||
|
Hi { friend } if let None = friend => {}
|
||||||
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
if let Some(foooooooooooooo) = hiiiiiiiiiiiiiii => {}
|
||||||
|
aaaaaaaaaaaaaaaaa
|
||||||
|
if let Superman {
|
||||||
|
powers: Some(goteem),
|
||||||
|
..
|
||||||
|
} = all::get_random_being::<Super>() => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user