547577fa5d
for now, let-chains can only be formatted on a single line if the chain consits of 2 expressions where the first is an identifier proceeded by any number of unary operators and the second is a let-expr.
129 lines
3.0 KiB
Rust
129 lines
3.0 KiB
Rust
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!()
|
|
}
|
|
}
|
|
|
|
fn test_single_line_let_chain() {
|
|
// first item in let-chain is an ident
|
|
if a && let Some(b) = foo() {}
|
|
|
|
// first item in let-chain is a unary ! with an ident
|
|
let unary_not = if !from_hir_call && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is a unary * with an ident
|
|
let unary_deref = if *some_deref && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is a unary - (neg) with an ident
|
|
let unary_neg = if -some_ident && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is a try (?) with an ident
|
|
let try_ = if some_try? && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is an ident wrapped in parens
|
|
let in_parens = if (some_ident) && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is a ref & with an ident
|
|
let _ref = if &some_ref && let Some(p) = parent {};
|
|
|
|
// first item in let-chain is a ref &mut with an ident
|
|
let mut_ref = if &mut some_ref && let Some(p) = parent {};
|
|
|
|
// chain unary ref and try
|
|
let chain_of_unary_ref_and_try = if !&*some_ref? && let Some(p) = parent {};
|
|
}
|
|
|
|
fn test_multi_line_let_chain() {
|
|
// Can only single line the let-chain if the first item is an ident
|
|
if let Some(x) = y
|
|
&& a
|
|
{}
|
|
|
|
// More than one let-chain must be formatted on multiple lines
|
|
if let Some(x) = y
|
|
&& let Some(a) = b
|
|
{}
|
|
|
|
// The ident isn't long enough so we don't wrap the first let-chain
|
|
if a && let Some(x) = y
|
|
&& let Some(a) = b
|
|
{}
|
|
|
|
// The ident is long enough so both let-chains are wrapped
|
|
if aaa
|
|
&& let Some(x) = y
|
|
&& let Some(a) = b
|
|
{}
|
|
|
|
// function call
|
|
if a()
|
|
&& let Some(x) = y
|
|
{}
|
|
|
|
// bool literal
|
|
if true
|
|
&& let Some(x) = y
|
|
{}
|
|
|
|
// cast to a bool
|
|
if 1 as bool
|
|
&& let Some(x) = y
|
|
{}
|
|
|
|
// matches! macro call
|
|
if matches!(a, some_type)
|
|
&& let Some(x) = y
|
|
{}
|
|
|
|
// block expression returning bool
|
|
if { true }
|
|
&& let Some(x) = y
|
|
{}
|
|
|
|
// field access
|
|
if a.x
|
|
&& let Some(x) = y
|
|
{}
|
|
}
|