From abf8f43233cd281ef005cda050e887406fa9e1e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=96mer=20Sinan=20A=C4=9Facan?= Date: Sat, 7 Oct 2017 15:44:28 +0300 Subject: [PATCH] Implement match_arm_forces_newline option (#2039) --- src/config.rs | 2 ++ src/expr.rs | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/config.rs b/src/config.rs index 8aff7747dd2..8c200302c5b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -597,6 +597,8 @@ pub fn get_toml_path(dir: &Path) -> Result, Error> { the same line with the pattern of arms"; match_block_trailing_comma: bool, false, "Put a trailing comma after a block based match arm (non-block arms are not affected)"; + match_arm_forces_newline: bool, false, + "Force match arm bodies to be in a new lines"; indent_match_arms: bool, true, "Indent match arms instead of keeping them at the same \ indentation level as the match keyword"; match_pattern_separator_break_point: SeparatorPlace, SeparatorPlace::Back, diff --git a/src/expr.rs b/src/expr.rs index 8bef270cf76..51dc7a9bb7a 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1695,15 +1695,20 @@ fn rewrite_match_body( is_last: bool, ) -> Option { let (extend, body) = flatten_arm_body(context, body); - - let comma = arm_comma(context.config, body, is_last); - let alt_block_sep = String::from("\n") + &shape.indent.block_only().to_string(context.config); - let alt_block_sep = alt_block_sep.as_str(); let (is_block, is_empty_block) = if let ast::ExprKind::Block(ref block) = body.node { (true, is_empty_block(block, context.codemap)) } else { (false, false) }; + let extend = if context.config.match_arm_forces_newline() { + is_block + } else { + extend + }; + + let comma = arm_comma(context.config, body, is_last); + let alt_block_sep = String::from("\n") + &shape.indent.block_only().to_string(context.config); + let alt_block_sep = alt_block_sep.as_str(); let combine_orig_body = |body_str: &str| { let block_sep = match context.config.control_brace_style() { @@ -1716,7 +1721,11 @@ fn rewrite_match_body( let forbid_same_line = has_guard && pats_str.contains('\n') && !is_empty_block; let next_line_indent = if is_block { - shape.indent + if is_empty_block { + shape.indent.block_indent(context.config) + } else { + shape.indent + } } else { shape.indent.block_indent(context.config) }; @@ -1772,7 +1781,7 @@ fn rewrite_match_body( match rewrite { Some(ref body_str) - if !forbid_same_line + if !forbid_same_line && !context.config.match_arm_forces_newline() && (is_block || (!body_str.contains('\n') && body_str.len() <= body_shape.width)) => { -- 2.44.0