diff --git a/src/matches.rs b/src/matches.rs index 7b691bf6100..3f02357a400 100644 --- a/src/matches.rs +++ b/src/matches.rs @@ -284,6 +284,15 @@ fn rewrite_match_arm( ) } +fn stmt_is_expr_mac(stmt: &ast::Stmt) -> bool { + if let ast::StmtKind::Expr(expr) = &stmt.kind { + if let ast::ExprKind::MacCall(_) = &expr.kind { + return true; + } + } + false +} + fn block_can_be_flattened<'a>( context: &RewriteContext<'_>, expr: &'a ast::Expr, @@ -292,7 +301,10 @@ fn block_can_be_flattened<'a>( ast::ExprKind::Block(ref block, _) if !is_unsafe_block(block) && !context.inside_macro() - && is_simple_block(context, block, Some(&expr.attrs)) => + && is_simple_block(context, block, Some(&expr.attrs)) + // Don't flatten a block containing a macro invocation, + // since it may expand to a statement + && !stmt_is_expr_mac(&block.stmts[0]) => { Some(&*block) } diff --git a/tests/target/configs/match_arm_blocks/false.rs b/tests/target/configs/match_arm_blocks/false.rs index 4d53a96a7b7..7a9834168c7 100644 --- a/tests/target/configs/match_arm_blocks/false.rs +++ b/tests/target/configs/match_arm_blocks/false.rs @@ -5,6 +5,8 @@ fn main() { match lorem { true => foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x), - false => println!("{}", sit), + false => { + println!("{}", sit) + } } } diff --git a/tests/target/configs/match_arm_blocks/true.rs b/tests/target/configs/match_arm_blocks/true.rs index d75ef03397a..eb9e34059c7 100644 --- a/tests/target/configs/match_arm_blocks/true.rs +++ b/tests/target/configs/match_arm_blocks/true.rs @@ -6,6 +6,8 @@ fn main() { true => { foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo(x) } - false => println!("{}", sit), + false => { + println!("{}", sit) + } } } diff --git a/tests/target/issue-2936.rs b/tests/target/issue-2936.rs index 3d5207597c4..1d6eb6d6052 100644 --- a/tests/target/issue-2936.rs +++ b/tests/target/issue-2936.rs @@ -11,7 +11,9 @@ impl Something for AStruct { let err: &CStr = match err.kind { ParseErrorKind::Custom(StyleParseErrorKind::MediaQueryExpectedFeatureName( .., - )) => cstr!("PEMQExpectedFeatureName"), + )) => { + cstr!("PEMQExpectedFeatureName") + } }; } }; diff --git a/tests/target/match.rs b/tests/target/match.rs index 92abda9752e..123c4c55f6a 100644 --- a/tests/target/match.rs +++ b/tests/target/match.rs @@ -166,9 +166,15 @@ fn issue355() { a => println!("a", b), b => vec![1, 2], c => vec![3; 4], - d => println!("a", b), - e => vec![1, 2], - f => vec![3; 4], + d => { + println!("a", b) + } + e => { + vec![1, 2] + } + f => { + vec![3; 4] + } h => println!("a", b), // h comment i => vec![1, 2], // i comment j => vec![3; 4], // j comment