Skip to content
50 changes: 50 additions & 0 deletions Configurations.md
Original file line number Diff line number Diff line change
Expand Up @@ -2381,12 +2381,62 @@ Don't reformat out of line modules

Maximum line length for single line if-else expressions. A value of `0` (zero) results in if-else expressions always being broken into multiple lines. Note this occurs when `use_small_heuristics` is set to `Off`.

Common if-else expressions that may be formatted on a single line are expressions on the right hand side of the equals (`=`) sign in a let statement, expressions inside a function call, and expressions inside a closure. If one of the if-else blocks contain a statement, a comment, an attribute, or is empty, the if-else expression will be broken into multiple lines. For backwards compatability reasons, an if-else expression at the end of a block is treated as a statement when using `version = "One"` and may not be formatted on a single line. When using `version = "Two"` an if-else expression at the end of a block may be formatted on a single line if it is a simple if-else expression as described earlier. As an example, the last if-else expression in the last snippet of this section would be formatted on a single line with `version = "Two"`.

- **Default value**: `50`
- **Possible values**: any positive integer that is less than or equal to the value specified for [`max_width`](#max_width)
- **Stable**: Yes

By default this option is set as a percentage of [`max_width`](#max_width) provided by [`use_small_heuristics`](#use_small_heuristics), but a value set directly for `single_line_if_else_max_width` will take precedence.

#### `50` (default):

```rust
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
fun(if some_long_name && some_other_long_name {
0
} else {
10
});
closure(|super_long_closure_variable| {
if super_long_closure_variable == 0 {
0
} else {
10
}
});
let bar = if some_long_name && some_other_long_name {
baz()
} else {
buzz()
};
if some_long_name && some_other_long_name {
1
} else {
2
}
}
```

#### `70`:

```rust
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
fun(if some_long_name && some_other_long_name { 0 } else { 10 });
closure(|super_long_closure_variable| if super_long_closure_variable == 0 { 0 } else { 10 });
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name {
1
} else {
2
}
}
```

See also [`max_width`](#max_width) and [`use_small_heuristics`](#use_small_heuristics)

## `space_after_colon`
Expand Down
8 changes: 8 additions & 0 deletions tests/source/issue-5496/70.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// rustfmt-version: One
// rustfmt-single_line_if_else_max_width: 70
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name { 1 } else { 2 }
}
12 changes: 12 additions & 0 deletions tests/source/issue-5496/70_version_two.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// rustfmt-version: Two
// rustfmt-single_line_if_else_max_width: 70
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name {
1
} else {
2
}
}
6 changes: 6 additions & 0 deletions tests/source/issue-5496/default.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name { 1 } else { 2 }
}
10 changes: 10 additions & 0 deletions tests/source/issue-5496/nested_if_one.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// rustfmt-version: One
// rustfmt-single_line_if_else_max_width: 75
fn foo() -> usize {
// nested
let _ = if true { if false { 1 } else { 2 } } else { 3 };
let _ = if true { 3 } else { if false { 1 } else { 2 } };
let _ = if true { if false { 1 } else { 2 } } else { if false { 3 } else { 4 } };

1
}
22 changes: 22 additions & 0 deletions tests/source/issue-5496/nested_if_two.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// rustfmt-version: Two
// rustfmt-single_line_if_else_max_width: 75
fn foo() -> usize {
// nested
let _ = if true {
if false { 1 } else { 2 }
} else {
3
};
let _ = if true {
3
} else {
if false { 1 } else { 2 }
};
let _ = if true {
if false { 1 } else { 2 }
} else {
if false { 3 } else { 4 }
};

1
}
24 changes: 24 additions & 0 deletions tests/source/issue-5496/simple_one.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// rustfmt-version: One
fn foo() -> usize {
// empty
let _ = if true { 1 } else { };
let _ = if true { } else { 2 };
let _ = if true { } else { };

// attribute
let _ = if true { #[must_use] 1 } else { 2 };
let _ = if true { 1 } else { #[must_use] 2 };
let _ = if true { #[must_use] 1 } else { #[must_use] 2 };

// comment
let _ = if true { 1 /*1*/ } else { 2 };
let _ = if true { 1 } else { 2 /*2*/};
let _ = if true { 1 /*1*/} else { 2 /*2*/};

// a statement
let _ = if true { let a = 1; a } else { 2 };
let _ = if true { 1 } else { let b = 2; b };
let _ = if true { let a = 1; a } else { let b = 2; b };

1
}
24 changes: 24 additions & 0 deletions tests/source/issue-5496/simple_two.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// rustfmt-version: Two
fn foo() -> usize {
// empty
let _ = if true { 1 } else { };
let _ = if true { } else { 2 };
let _ = if true { } else { };

// attribute
let _ = if true { #[must_use] 1 } else { 2 };
let _ = if true { 1 } else { #[must_use] 2 };
let _ = if true { #[must_use] 1 } else { #[must_use] 2 };

// comment
let _ = if true { 1 /*1*/ } else { 2 };
let _ = if true { 1 } else { 2 /*2*/};
let _ = if true { 1 /*1*/} else { 2 /*2*/};

// a statement
let _ = if true { let a = 1; a } else { 2 };
let _ = if true { 1 } else { let b = 2; b };
let _ = if true { let a = 1; a } else { let b = 2; b };

1
}
12 changes: 12 additions & 0 deletions tests/target/issue-5496/70.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// rustfmt-version: One
// rustfmt-single_line_if_else_max_width: 70
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name {
1
} else {
2
}
}
8 changes: 8 additions & 0 deletions tests/target/issue-5496/70_version_two.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// rustfmt-version: Two
// rustfmt-single_line_if_else_max_width: 70
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name { baz() } else { buzz() };
if some_long_name && some_other_long_name { 1 } else { 2 }
}
14 changes: 14 additions & 0 deletions tests/target/issue-5496/default.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
fn foo() -> usize {
let some_long_name = true;
let some_other_long_name = false;
let bar = if some_long_name && some_other_long_name {
baz()
} else {
buzz()
};
if some_long_name && some_other_long_name {
1
} else {
2
}
}
38 changes: 38 additions & 0 deletions tests/target/issue-5496/nested_if_one.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// rustfmt-version: One
// rustfmt-single_line_if_else_max_width: 75
fn foo() -> usize {
// nested
let _ = if true {
if false {
1
} else {
2
}
} else {
3
};
let _ = if true {
3
} else {
if false {
1
} else {
2
}
};
let _ = if true {
if false {
1
} else {
2
}
} else {
if false {
3
} else {
4
}
};

1
}
22 changes: 22 additions & 0 deletions tests/target/issue-5496/nested_if_two.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// rustfmt-version: Two
// rustfmt-single_line_if_else_max_width: 75
fn foo() -> usize {
// nested
let _ = if true {
if false { 1 } else { 2 }
} else {
3
};
let _ = if true {
3
} else {
if false { 1 } else { 2 }
};
let _ = if true {
if false { 1 } else { 2 }
} else {
if false { 3 } else { 4 }
};

1
}
76 changes: 76 additions & 0 deletions tests/target/issue-5496/simple_one.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// rustfmt-version: One
fn foo() -> usize {
// empty
let _ = if true {
1
} else {
};
let _ = if true {
} else {
2
};
let _ = if true {
} else {
};

// attribute
let _ = if true {
#[must_use]
1
} else {
2
};
let _ = if true {
1
} else {
#[must_use]
2
};
let _ = if true {
#[must_use]
1
} else {
#[must_use]
2
};

// comment
let _ = if true {
1 /*1*/
} else {
2
};
let _ = if true {
1
} else {
2 /*2*/
};
let _ = if true {
1 /*1*/
} else {
2 /*2*/
};

// a statement
let _ = if true {
let a = 1;
a
} else {
2
};
let _ = if true {
1
} else {
let b = 2;
b
};
let _ = if true {
let a = 1;
a
} else {
let b = 2;
b
};

1
}
Loading