Skip to content

Commit 1b0efd9

Browse files
authored
Merge pull request #2847 from mbebenita/max-width
Add max_width option for all heuristics.
2 parents b28a0cd + c2ae39e commit 1b0efd9

File tree

5 files changed

+75
-1
lines changed

5 files changed

+75
-1
lines changed

Configurations.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
276276
Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'.
277277

278278
- **Default value**: `Default`
279-
- **Possible values**: `Default`, `Off`
279+
- **Possible values**: `Default`, `Off`, `Max`
280280
- **Stable**: Yes
281281

282282
#### `Default` (default):
@@ -337,6 +337,24 @@ fn main() {
337337
}
338338
```
339339

340+
#### `Max`:
341+
342+
```rust
343+
enum Lorem {
344+
Ipsum,
345+
Dolor(bool),
346+
Sit { amet: Consectetur, adipiscing: Elit },
347+
}
348+
349+
fn main() {
350+
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
351+
352+
let lorem = Lorem { ipsum: dolor, sit: amet };
353+
354+
let lorem = if ipsum { dolor } else { sit };
355+
}
356+
```
357+
340358
## `binop_separator`
341359

342360
Where to put a binary operator when a binary expression goes multiline.

src/config/config_type.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,9 @@ macro_rules! create_config {
403403
if self.use_small_heuristics.2 == Heuristics::Default {
404404
let max_width = self.max_width.2;
405405
self.set().width_heuristics(WidthHeuristics::scaled(max_width));
406+
} else if self.use_small_heuristics.2 == Heuristics::Max {
407+
let max_width = self.max_width.2;
408+
self.set().width_heuristics(WidthHeuristics::set(max_width));
406409
} else {
407410
self.set().width_heuristics(WidthHeuristics::null());
408411
}

src/config/options.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ configuration_option_enum! { TypeDensity:
154154
configuration_option_enum! { Heuristics:
155155
// Turn off any heuristics
156156
Off,
157+
// Turn on max heuristics
158+
Max,
157159
// Use Rustfmt's defaults
158160
Default,
159161
}
@@ -257,6 +259,17 @@ impl WidthHeuristics {
257259
}
258260
}
259261

262+
pub fn set(max_width: usize) -> WidthHeuristics {
263+
WidthHeuristics {
264+
fn_call_width: max_width,
265+
struct_lit_width: max_width,
266+
struct_variant_width: max_width,
267+
array_width: max_width,
268+
chain_width: max_width,
269+
single_line_if_else_max_width: max_width,
270+
}
271+
}
272+
260273
// scale the default WidthHeuristics according to max_width
261274
pub fn scaled(max_width: usize) -> WidthHeuristics {
262275
const DEFAULT_MAX_WIDTH: usize = 100;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// rustfmt-use_small_heuristics: Max
2+
3+
enum Lorem {
4+
Ipsum,
5+
Dolor(bool),
6+
Sit {
7+
amet: Consectetur,
8+
adipiscing: Elit,
9+
},
10+
}
11+
12+
fn main() {
13+
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
14+
15+
let lorem = Lorem {
16+
ipsum: dolor,
17+
sit: amet,
18+
};
19+
20+
let lorem = if ipsum {
21+
dolor
22+
} else {
23+
sit
24+
};
25+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// rustfmt-use_small_heuristics: Max
2+
3+
enum Lorem {
4+
Ipsum,
5+
Dolor(bool),
6+
Sit { amet: Consectetur, adipiscing: Elit },
7+
}
8+
9+
fn main() {
10+
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
11+
12+
let lorem = Lorem { ipsum: dolor, sit: amet };
13+
14+
let lorem = if ipsum { dolor } else { sit };
15+
}

0 commit comments

Comments
 (0)