diff --git a/src/expr.rs b/src/expr.rs index 54a6fb20fa88..25c863639214 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -663,6 +663,7 @@ fn rewrite_if_else(context: &RewriteContext, let between_if_cond = mk_sp(span_after(span, "if", context.codemap), pat.map_or(cond.span.lo, |_| span_before(span, "let", context.codemap))); + let between_if_cond_comment = extract_comment(between_if_cond, &context, offset, width); let after_cond_comment = extract_comment(mk_sp(cond.span.hi, if_block.span.lo), @@ -680,23 +681,23 @@ fn rewrite_if_else(context: &RewriteContext, let rewrite = match else_block.node { // If the else expression is another if-else expression, prevent it // from being formatted on a single line. - ast::Expr_::ExprIfLet(ref pat, ref cond, ref if_block, ref else_block) => { + ast::Expr_::ExprIfLet(ref pat, ref cond, ref if_block, ref next_else_block) => { rewrite_if_else(context, cond, if_block, - else_block.as_ref().map(|e| &**e), - mk_sp(span_after(span, "else", context.codemap), span.hi), + next_else_block.as_ref().map(|e| &**e), + mk_sp(else_block.span.lo, span.hi), Some(pat), width, offset, false) } - ast::Expr_::ExprIf(ref cond, ref if_block, ref else_block) => { + ast::Expr_::ExprIf(ref cond, ref if_block, ref next_else_block) => { rewrite_if_else(context, cond, if_block, - else_block.as_ref().map(|e| &**e), - mk_sp(span_after(span, "else", context.codemap), span.hi), + next_else_block.as_ref().map(|e| &**e), + mk_sp(else_block.span.lo, span.hi), None, width, offset, diff --git a/tests/source/expr.rs b/tests/source/expr.rs index 26b22ed29be9..c5002f5ec15f 100644 --- a/tests/source/expr.rs +++ b/tests/source/expr.rs @@ -233,3 +233,14 @@ fn blocks() { println!("yay arithmetix!"); }; } + +fn issue767() { + if false { + if false { + } else { + // A let binding here seems necessary to trigger it. + let _ = (); + } + } else if let false = false { + } +} diff --git a/tests/target/expr.rs b/tests/target/expr.rs index d39309258b0e..9c9c65a690cd 100644 --- a/tests/target/expr.rs +++ b/tests/target/expr.rs @@ -256,3 +256,14 @@ fn blocks() { println!("yay arithmetix!"); }; } + +fn issue767() { + if false { + if false { + } else { + // A let binding here seems necessary to trigger it. + let _ = (); + } + } else if let false = false { + } +}