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.
122 lines
2.9 KiB
Rust
122 lines
2.9 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 {
|
|
|
|
}
|
|
}
|