about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorC4K3 <github25b@c4k3.net>2017-03-26 07:32:29 +0200
committerNick Cameron <nrc@ncameron.org>2017-03-26 18:32:29 +1300
commitabca1dededc504eeff7fb31fb2f92e54c7ddae0e (patch)
tree176cc589852c7f712d70ca6c2d049d562a761cbb /src
parent0dd0cc1941d5ef8222e36d54b0efd38628d589ee (diff)
Add indent_match_arms option (#1404)
Makes it optional whether to indent arms in match expressions. Setting this
to false may be desirable for people wishing to avoid double-indents, in
that if the match arm is a block, the block will cause an extra indentation
level, and if it isn't a block but just a single line, it's still easy to
see the logic at a glance.

This style is preferred in certain other languages with switch statements,
e.g. Linux style C and the most common Java style.
Diffstat (limited to 'src')
-rw-r--r--src/config.rs2
-rw-r--r--src/expr.rs7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/config.rs b/src/config.rs
index 78c6b91526f..3793e1fd290 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -388,6 +388,8 @@ create_config! {
     wrap_match_arms: bool, true, "Wrap multiline match arms in blocks";
     match_block_trailing_comma: bool, false,
         "Put a trailing comma after a block based match arm (non-block arms are not affected)";
+    indent_match_arms: bool, true, "Indent match arms instead of keeping them at the same \
+                                    indentation level as the match keyword";
     closure_block_indent_threshold: isize, 7, "How many lines a closure must have before it is \
                                                block indented. -1 means never use block indent.";
     space_before_type_annotation: bool, false,
diff --git a/src/expr.rs b/src/expr.rs
index 1df0f2a96d0..6ab9e1c3393 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1137,7 +1137,12 @@ fn rewrite_match(context: &RewriteContext,
     };
     let mut result = format!("match {}{}{{", cond_str, block_sep);
 
-    let arm_shape = shape.block_indent(context.config.tab_spaces);
+    let arm_shape = if context.config.indent_match_arms {
+        shape.block_indent(context.config.tab_spaces)
+    } else {
+        shape.block_indent(0)
+    };
+
     let arm_indent_str = arm_shape.indent.to_string(context.config);
 
     let open_brace_pos = context.codemap.span_after(mk_sp(cond.span.hi, arm_start_pos(&arms[0])),