Use correct heuristic for match block flattening

This commit is contained in:
Ivan Molodetskikh 2018-09-11 08:41:16 +03:00
parent f116baeed7
commit 838df8dfb6
No known key found for this signature in database
GPG key ID: 02CE38DA47E9D691
4 changed files with 22 additions and 20 deletions

View file

@ -1303,7 +1303,7 @@ fn main() {
});
match lorem {
None => if ipsum {
None => |ipsum| {
println!("Hello World");
},
Some(dolor) => foo(),
@ -1324,7 +1324,7 @@ fn main() {
match lorem {
None => {
if ipsum {
|ipsum| {
println!("Hello World");
}
}

View file

@ -95,11 +95,13 @@ impl SeparatorPlace {
) -> SeparatorPlace {
match tactic {
DefinitiveListTactic::Vertical => default,
_ => if sep == "," {
SeparatorPlace::Back
} else {
default
},
_ => {
if sep == "," {
SeparatorPlace::Back
} else {
default
}
}
}
}
}

View file

@ -179,11 +179,13 @@ pub fn format_expr(
Some(format!("break{}", id_str))
}
}
ast::ExprKind::Yield(ref opt_expr) => if let Some(ref expr) = *opt_expr {
rewrite_unary_prefix(context, "yield ", &**expr, shape)
} else {
Some("yield".to_string())
},
ast::ExprKind::Yield(ref opt_expr) => {
if let Some(ref expr) = *opt_expr {
rewrite_unary_prefix(context, "yield ", &**expr, shape)
} else {
Some("yield".to_string())
}
}
ast::ExprKind::Closure(capture, asyncness, movability, ref fn_decl, ref body, _) => {
closures::rewrite_closure(
capture, asyncness, movability, fn_decl, body, expr.span, context, shape,

View file

@ -20,7 +20,7 @@ use comment::{combine_strs_with_missing_comments, rewrite_comment};
use config::{Config, ControlBraceStyle, IndentStyle};
use expr::{
format_expr, is_empty_block, is_simple_block, is_unsafe_block, prefer_next_line,
rewrite_multiple_patterns, ExprType, RhsTactics, ToExpr,
rewrite_multiple_patterns, ExprType, RhsTactics,
};
use lists::{itemize_list, write_list, ListFormatting};
use rewrite::{Rewrite, RewriteContext};
@ -314,23 +314,21 @@ fn block_can_be_flattened<'a>(
// @extend: true if the arm body can be put next to `=>`
// @body: flattened body, if the body is block with a single expression
fn flatten_arm_body<'a>(context: &'a RewriteContext, body: &'a ast::Expr) -> (bool, &'a ast::Expr) {
let can_extend =
|expr| !context.config.force_multiline_blocks() && can_flatten_block_around_this(expr);
if let Some(ref block) = block_can_be_flattened(context, body) {
if let ast::StmtKind::Expr(ref expr) = block.stmts[0].node {
if let ast::ExprKind::Block(..) = expr.node {
flatten_arm_body(context, expr)
} else {
let can_extend_expr =
!context.config.force_multiline_blocks() && can_flatten_block_around_this(expr);
(can_extend_expr, &*expr)
(can_extend(expr), &*expr)
}
} else {
(false, &*body)
}
} else {
(
!context.config.force_multiline_blocks() && body.can_be_overflowed(context, 1),
&*body,
)
(can_extend(body), &*body)
}
}