Skip to content

Multi-lined pattern of if let #3648

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
topecongiro opened this issue Jun 24, 2019 · 2 comments
Open

Multi-lined pattern of if let #3648

topecongiro opened this issue Jun 24, 2019 · 2 comments
Labels
a-matches match arms, patterns, blocks, etc p-low

Comments

@topecongiro
Copy link
Contributor

From rust-lang/rust-clippy#4123 (comment):

     F: FnMut(&ast::Block, Option<&ast::Label>),
 {
     if let ast::ExprKind::While(_, loop_block, label)
-        | ast::ExprKind::ForLoop(_, _, loop_block, label)
-        | ast::ExprKind::Loop(loop_block, label)
-        = &expr.node
+    | ast::ExprKind::ForLoop(_, _, loop_block, label)
+    | ast::ExprKind::Loop(loop_block, label) = &expr.node
     {
         func(loop_block, label.as_ref());
     }

In this case,

  1. Should we add indentation to each clause that appears after the first one?
  2. Should we keep the expression (&expr.node) on the same line as the last clause, or put it on the next line?

Note that for multi-lined patterns of match's arm, rustfmt does not add indentation.

match some_value {
    ast::ExprKind::While(_, loop_block, label)
    | ast::ExprKind::ForLoop(_, _, loop_block, label)
    | ast::ExprKind::Loop(loop_block, label) = &expr.node
    => {
        // ...
    }
@rchaser53
Copy link
Contributor

I think that the pattern like multi-lined patterns of match's arm is good.

  1. No.
  2. keep the expression on the same line as the last clause.

@ytmimi
Copy link
Contributor

ytmimi commented Jul 20, 2022

confirming I can reproduce this behavior with rustfmt 1.5.1-nightly (f2c31ba0 2022-07-19)

Input

fn foo(f: F)
where
    F: FnMut(&ast::Block, Option<&ast::Label>),
{
    if let ast::ExprKind::While(_, loop_block, label)
        | ast::ExprKind::ForLoop(_, _, loop_block, label)
        | ast::ExprKind::Loop(loop_block, label)
        = &expr.node
    {
        func(loop_block, label.as_ref());
    }
}

Output

fn foo(f: F)
where
    F: FnMut(&ast::Block, Option<&ast::Label>),
{
    if let ast::ExprKind::While(_, loop_block, label)
    | ast::ExprKind::ForLoop(_, _, loop_block, label)
    | ast::ExprKind::Loop(loop_block, label) = &expr.node
    {
        func(loop_block, label.as_ref());
    }
}

@ytmimi ytmimi added a-matches match arms, patterns, blocks, etc p-low labels Jul 20, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a-matches match arms, patterns, blocks, etc p-low
Projects
None yet
Development

No branches or pull requests

3 participants