From b8da53ad7865a813e5862fb2de7e839d41af27b3 Mon Sep 17 00:00:00 2001 From: Marcus Ball Date: Tue, 28 Feb 2017 15:46:10 -0500 Subject: [PATCH] Fix wrap_match_arms resulting in a missing comma (#1307) * Fix match arms missing comma with "wrap_match_arms = false" * remove assert; use body_suffix for comma * basic test case for issue 1127 --- src/expr.rs | 30 +++++++++++++++++++++--------- tests/source/issue-1127.rs | 23 +++++++++++++++++++++++ tests/target/issue-1127.rs | 25 +++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 tests/source/issue-1127.rs create mode 100644 tests/target/issue-1127.rs diff --git a/src/expr.rs b/src/expr.rs index 52c0aee279d..edf48d6d7bb 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1293,21 +1293,33 @@ impl Rewrite for ast::Arm { ("{", "}") } } else { - ("", "") + ("", ",") }; + let block_sep = match context.config.control_brace_style { ControlBraceStyle::AlwaysNextLine => alt_block_sep + body_prefix + "\n", _ => String::from(" ") + body_prefix + "\n", }; - Some(format!("{}{} =>{}{}{}\n{}{}", - attr_str.trim_left(), - pats_str, - block_sep, - indent_str, - next_line_body, - shape.indent.to_string(context.config), - body_suffix)) + + if context.config.wrap_match_arms { + Some(format!("{}{} =>{}{}{}\n{}{}", + attr_str.trim_left(), + pats_str, + block_sep, + indent_str, + next_line_body, + shape.indent.to_string(context.config), + body_suffix)) + } else { + Some(format!("{}{} =>{}{}{}{}", + attr_str.trim_left(), + pats_str, + block_sep, + indent_str, + next_line_body, + body_suffix)) + } } } diff --git a/tests/source/issue-1127.rs b/tests/source/issue-1127.rs new file mode 100644 index 00000000000..4820f5ea229 --- /dev/null +++ b/tests/source/issue-1127.rs @@ -0,0 +1,23 @@ +// rustfmt-max_width:120 +// rustfmt-wrap_match_arms: false +// rustfmt-match_block_trailing_comma: true + +fn a_very_very_very_very_very_very_very_very_very_very_very_long_function_name() -> i32 { + 42 +} + +enum TestEnum { + AVeryVeryLongEnumName, + AnotherVeryLongEnumName, + TheLastVeryLongEnumName, +} + +fn main() { + let var = TestEnum::AVeryVeryLongEnumName; + let num = match var { + TestEnum::AVeryVeryLongEnumName => a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + TestEnum::AnotherVeryLongEnumName => a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + TestEnum::TheLastVeryLongEnumName => a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + }; +} + diff --git a/tests/target/issue-1127.rs b/tests/target/issue-1127.rs new file mode 100644 index 00000000000..3d133f4ce9c --- /dev/null +++ b/tests/target/issue-1127.rs @@ -0,0 +1,25 @@ +// rustfmt-max_width:120 +// rustfmt-wrap_match_arms: false +// rustfmt-match_block_trailing_comma: true + +fn a_very_very_very_very_very_very_very_very_very_very_very_long_function_name() -> i32 { + 42 +} + +enum TestEnum { + AVeryVeryLongEnumName, + AnotherVeryLongEnumName, + TheLastVeryLongEnumName, +} + +fn main() { + let var = TestEnum::AVeryVeryLongEnumName; + let num = match var { + TestEnum::AVeryVeryLongEnumName => + a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + TestEnum::AnotherVeryLongEnumName => + a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + TestEnum::TheLastVeryLongEnumName => + a_very_very_very_very_very_very_very_very_very_very_very_long_function_name(), + }; +}