Use correct heuristic for match block flattening
This commit is contained in:
parent
f116baeed7
commit
838df8dfb6
4 changed files with 22 additions and 20 deletions
|
@ -1303,7 +1303,7 @@ fn main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
match lorem {
|
match lorem {
|
||||||
None => if ipsum {
|
None => |ipsum| {
|
||||||
println!("Hello World");
|
println!("Hello World");
|
||||||
},
|
},
|
||||||
Some(dolor) => foo(),
|
Some(dolor) => foo(),
|
||||||
|
@ -1324,7 +1324,7 @@ fn main() {
|
||||||
|
|
||||||
match lorem {
|
match lorem {
|
||||||
None => {
|
None => {
|
||||||
if ipsum {
|
|ipsum| {
|
||||||
println!("Hello World");
|
println!("Hello World");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,11 +95,13 @@ impl SeparatorPlace {
|
||||||
) -> SeparatorPlace {
|
) -> SeparatorPlace {
|
||||||
match tactic {
|
match tactic {
|
||||||
DefinitiveListTactic::Vertical => default,
|
DefinitiveListTactic::Vertical => default,
|
||||||
_ => if sep == "," {
|
_ => {
|
||||||
SeparatorPlace::Back
|
if sep == "," {
|
||||||
} else {
|
SeparatorPlace::Back
|
||||||
default
|
} else {
|
||||||
},
|
default
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/expr.rs
12
src/expr.rs
|
@ -179,11 +179,13 @@ pub fn format_expr(
|
||||||
Some(format!("break{}", id_str))
|
Some(format!("break{}", id_str))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast::ExprKind::Yield(ref opt_expr) => if let Some(ref expr) = *opt_expr {
|
ast::ExprKind::Yield(ref opt_expr) => {
|
||||||
rewrite_unary_prefix(context, "yield ", &**expr, shape)
|
if let Some(ref expr) = *opt_expr {
|
||||||
} else {
|
rewrite_unary_prefix(context, "yield ", &**expr, shape)
|
||||||
Some("yield".to_string())
|
} else {
|
||||||
},
|
Some("yield".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
ast::ExprKind::Closure(capture, asyncness, movability, ref fn_decl, ref body, _) => {
|
ast::ExprKind::Closure(capture, asyncness, movability, ref fn_decl, ref body, _) => {
|
||||||
closures::rewrite_closure(
|
closures::rewrite_closure(
|
||||||
capture, asyncness, movability, fn_decl, body, expr.span, context, shape,
|
capture, asyncness, movability, fn_decl, body, expr.span, context, shape,
|
||||||
|
|
|
@ -20,7 +20,7 @@ use comment::{combine_strs_with_missing_comments, rewrite_comment};
|
||||||
use config::{Config, ControlBraceStyle, IndentStyle};
|
use config::{Config, ControlBraceStyle, IndentStyle};
|
||||||
use expr::{
|
use expr::{
|
||||||
format_expr, is_empty_block, is_simple_block, is_unsafe_block, prefer_next_line,
|
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 lists::{itemize_list, write_list, ListFormatting};
|
||||||
use rewrite::{Rewrite, RewriteContext};
|
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 `=>`
|
// @extend: true if the arm body can be put next to `=>`
|
||||||
// @body: flattened body, if the body is block with a single expression
|
// @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) {
|
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 Some(ref block) = block_can_be_flattened(context, body) {
|
||||||
if let ast::StmtKind::Expr(ref expr) = block.stmts[0].node {
|
if let ast::StmtKind::Expr(ref expr) = block.stmts[0].node {
|
||||||
if let ast::ExprKind::Block(..) = expr.node {
|
if let ast::ExprKind::Block(..) = expr.node {
|
||||||
flatten_arm_body(context, expr)
|
flatten_arm_body(context, expr)
|
||||||
} else {
|
} else {
|
||||||
let can_extend_expr =
|
(can_extend(expr), &*expr)
|
||||||
!context.config.force_multiline_blocks() && can_flatten_block_around_this(expr);
|
|
||||||
(can_extend_expr, &*expr)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(false, &*body)
|
(false, &*body)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(
|
(can_extend(body), &*body)
|
||||||
!context.config.force_multiline_blocks() && body.can_be_overflowed(context, 1),
|
|
||||||
&*body,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue