}
```
+## `match_arm_forces_newline`
+
+Consistently put match arms (block based or not) in a newline.
+
+- **Default value**: `false`
+- **Possible values**: `true`, `false`
+
+#### `false` (default):
+
+```rust
+match x {
+ // a non-empty block
+ X0 => {
+ f();
+ }
+ // an empty block
+ X1 => {}
+ // a non-block
+ X2 => println!("ok"),
+}
+```
+
+#### `true`:
+
+```rust
+match x {
+ // a non-empty block
+ X0 => {
+ f();
+ }
+ // an empty block
+ X1 =>
+ {}
+ // a non-block
+ X2 => {
+ println!("ok")
+ }
+}
+```
+
+See also: [`wrap_match_arms`](#wrap_match_arms).
+
## `match_block_trailing_comma`
Put a trailing comma after a block based match arm (non-block arms are not affected)
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,
};
cond.rewrite(context, cond_shape)
}
- ast::ExprKind::Block(ref block) if block.stmts.len() == 1 => {
- stmt_expr(&block.stmts[0]).and_then(|e| rewrite_cond(context, e, shape))
- }
_ => to_control_flow(expr, ExprType::SubExpression).and_then(|control_flow| {
let alt_block_sep =
String::from("\n") + &shape.indent.block_only().to_string(context.config);
is_last: bool,
) -> Option<String> {
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() {
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)
};
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)) =>
{
) -> Option<String> {
if let ast::ExprKind::Closure(capture, ref fn_decl, ref body, _) = expr.node {
let body = match body.node {
- ast::ExprKind::Block(ref block) if block.stmts.len() == 1 => {
+ ast::ExprKind::Block(ref block) if is_simple_block(block, context.codemap) => {
stmt_expr(&block.stmts[0]).unwrap_or(body)
}
_ => body,
let closure_with_return_type = |aaaaaaaaaaaaaaaaaaaaaaarg1, aaaaaaaaaaaaaaaaaaaaaaarg2| -> Strong { "sup".to_owned() };
|arg1, arg2, _, _, arg3, arg4| { let temp = arg4 + arg3;
- arg2 * arg1 - temp }
+ arg2 * arg1 - temp };
+
+ let block_body_with_comment = args.iter()
+ .map(|a| {
+ // Emitting only dep-info is possible only for final crate type, as
+ // as others may emit required metadata for dependent crate types
+ if a.starts_with("--emit") && is_final_crate_type && !self.workspace_mode {
+ "--emit=dep-info"
+ } else { a }
+ });
}
fn issue311() {
--- /dev/null
+// rustfmt-match_arm_forces_newline: true
+// rustfmt-wrap_match_arms: false
+
+// match_arm_forces_newline puts all match arms bodies in a newline and indents
+// them.
+
+fn main() {
+ match x() {
+ // a short non-empty block
+ X0 => { f(); }
+ // a long non-empty block
+ X1 => { some.really.long.expression.fooooooooooooooooooooooooooooooooooooooooo().baaaaarrrrrrrrrrrrrrrrrrrrrrrrrr(); }
+ // an empty block
+ X2 => {}
+ // a short non-block
+ X3 => println!("ok"),
+ // a long non-block
+ X4 => foo.bar.baz.test.x.y.z.a.s.d.fasdfasdf.asfads.fasd.fasdfasdf.dfasfdsaf(),
+ }
+}
|arg1, arg2, _, _, arg3, arg4| {
let temp = arg4 + arg3;
arg2 * arg1 - temp
- }
+ };
+
+ let block_body_with_comment = args.iter().map(|a| {
+ // Emitting only dep-info is possible only for final crate type, as
+ // as others may emit required metadata for dependent crate types
+ if a.starts_with("--emit") && is_final_crate_type && !self.workspace_mode {
+ "--emit=dep-info"
+ } else {
+ a
+ }
+ });
}
fn issue311() {
--- /dev/null
+// rustfmt-match_arm_forces_newline: true
+// rustfmt-wrap_match_arms: false
+
+// match_arm_forces_newline puts all match arms bodies in a newline and indents
+// them.
+
+fn main() {
+ match x() {
+ // a short non-empty block
+ X0 => {
+ f();
+ }
+ // a long non-empty block
+ X1 => {
+ some.really
+ .long
+ .expression
+ .fooooooooooooooooooooooooooooooooooooooooo()
+ .baaaaarrrrrrrrrrrrrrrrrrrrrrrrrr();
+ }
+ // an empty block
+ X2 =>
+ {}
+ // a short non-block
+ X3 =>
+ println!("ok"),
+ // a long non-block
+ X4 =>
+ foo.bar
+ .baz
+ .test
+ .x
+ .y
+ .z
+ .a
+ .s
+ .d
+ .fasdfasdf
+ .asfads
+ .fasd
+ .fasdfasdf
+ .dfasfdsaf(),
+ }
+}