Merge pull request #2847 from mbebenita/max-width

Add max_width option for all heuristics.
This commit is contained in:
Nick Cameron 2018-07-18 09:06:26 +12:00 committed by GitHub
commit 1b0efd99e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 1 deletions

View file

@ -276,7 +276,7 @@ fn lorem<Ipsum, Dolor, Sit, Amet>() -> T
Whether to use different formatting for items and expressions if they satisfy a heuristic notion of 'small'.
- **Default value**: `Default`
- **Possible values**: `Default`, `Off`
- **Possible values**: `Default`, `Off`, `Max`
- **Stable**: Yes
#### `Default` (default):
@ -337,6 +337,24 @@ fn main() {
}
```
#### `Max`:
```rust
enum Lorem {
Ipsum,
Dolor(bool),
Sit { amet: Consectetur, adipiscing: Elit },
}
fn main() {
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
let lorem = Lorem { ipsum: dolor, sit: amet };
let lorem = if ipsum { dolor } else { sit };
}
```
## `binop_separator`
Where to put a binary operator when a binary expression goes multiline.

View file

@ -403,6 +403,9 @@ macro_rules! create_config {
if self.use_small_heuristics.2 == Heuristics::Default {
let max_width = self.max_width.2;
self.set().width_heuristics(WidthHeuristics::scaled(max_width));
} else if self.use_small_heuristics.2 == Heuristics::Max {
let max_width = self.max_width.2;
self.set().width_heuristics(WidthHeuristics::set(max_width));
} else {
self.set().width_heuristics(WidthHeuristics::null());
}

View file

@ -154,6 +154,8 @@ configuration_option_enum! { TypeDensity:
configuration_option_enum! { Heuristics:
// Turn off any heuristics
Off,
// Turn on max heuristics
Max,
// Use Rustfmt's defaults
Default,
}
@ -257,6 +259,17 @@ impl WidthHeuristics {
}
}
pub fn set(max_width: usize) -> WidthHeuristics {
WidthHeuristics {
fn_call_width: max_width,
struct_lit_width: max_width,
struct_variant_width: max_width,
array_width: max_width,
chain_width: max_width,
single_line_if_else_max_width: max_width,
}
}
// scale the default WidthHeuristics according to max_width
pub fn scaled(max_width: usize) -> WidthHeuristics {
const DEFAULT_MAX_WIDTH: usize = 100;

View file

@ -0,0 +1,25 @@
// rustfmt-use_small_heuristics: Max
enum Lorem {
Ipsum,
Dolor(bool),
Sit {
amet: Consectetur,
adipiscing: Elit,
},
}
fn main() {
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
let lorem = Lorem {
ipsum: dolor,
sit: amet,
};
let lorem = if ipsum {
dolor
} else {
sit
};
}

View file

@ -0,0 +1,15 @@
// rustfmt-use_small_heuristics: Max
enum Lorem {
Ipsum,
Dolor(bool),
Sit { amet: Consectetur, adipiscing: Elit },
}
fn main() {
lorem("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing");
let lorem = Lorem { ipsum: dolor, sit: amet };
let lorem = if ipsum { dolor } else { sit };
}