Skip to content

Commit

Permalink
Add short_item_threshold config option
Browse files Browse the repository at this point in the history
Allow custom short item threshold values via config
  • Loading branch information
123vivekr committed Mar 2, 2022
1 parent 272fb42 commit 2c05365
Show file tree
Hide file tree
Showing 9 changed files with 103 additions and 5 deletions.
31 changes: 31 additions & 0 deletions Configurations.md
Original file line number Diff line number Diff line change
Expand Up @@ -2200,6 +2200,37 @@ specific version of rustfmt is used in your CI, use this option.
- **Possible values**: any published version (e.g. `"0.3.8"`)
- **Stable**: No (tracking issue: [#3386](https://github.com/rust-lang/rustfmt/issues/3386))

## `short_item_threshold`

Maximum width threshold for a short item.

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

#### `10` (default):
```rust
fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
```
#### `20`:
```rust
fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000, 0xaaaaaaaaaaaaaaaa, 0xbbbbbbbbbbbbbbbb, 0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
```
See also [`max_width`](#max_width).

## `skip_children`

Don't reformat out of line modules
Expand Down
2 changes: 2 additions & 0 deletions src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ create_config! {
// Misc.
remove_nested_parens: bool, true, true, "Remove nested parens";
combine_control_expr: bool, true, false, "Combine control expressions with function calls";
short_item_threshold: usize, 10, true, "Maximum width threshold for a short item";
overflow_delimited_expr: bool, false, false,
"Allow trailing bracket/brace delimited expressions to overflow";
struct_field_align_threshold: usize, 0, false,
Expand Down Expand Up @@ -591,6 +592,7 @@ spaces_around_ranges = false
binop_separator = "Front"
remove_nested_parens = true
combine_control_expr = true
short_item_threshold = 10
overflow_delimited_expr = false
struct_field_align_threshold = 0
enum_discrim_align_threshold = 0
Expand Down
10 changes: 5 additions & 5 deletions src/overflow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ use crate::spanned::Spanned;
use crate::types::{can_be_overflowed_type, SegmentParam};
use crate::utils::{count_newlines, extra_offset, first_line_width, last_line_width, mk_sp};

const SHORT_ITEM_THRESHOLD: usize = 10;

/// A list of `format!`-like macros, that take a long format string and a list of arguments to
/// format.
///
Expand Down Expand Up @@ -572,7 +570,9 @@ impl<'a> Context<'a> {
if one_line {
tactic = DefinitiveListTactic::SpecialMacro(num_args_before);
};
} else if is_every_expr_simple(&self.items) && no_long_items(list_items) {
} else if is_every_expr_simple(&self.items)
&& no_long_items(list_items, self.context.config.short_item_threshold())
{
tactic = DefinitiveListTactic::Mixed;
}
}
Expand Down Expand Up @@ -755,9 +755,9 @@ fn shape_from_indent_style(
}
}

fn no_long_items(list: &[ListItem]) -> bool {
fn no_long_items(list: &[ListItem], short_item_threshold: usize) -> bool {
list.iter()
.all(|item| item.inner_as_ref().len() <= SHORT_ITEM_THRESHOLD)
.all(|item| item.inner_as_ref().len() <= short_item_threshold)
}

/// In case special-case style is required, returns an offset from which we start horizontal layout.
Expand Down
11 changes: 11 additions & 0 deletions tests/source/configs/short_item_threshold/10.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// rustfmt-short_item_threshold: 10

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
11 changes: 11 additions & 0 deletions tests/source/configs/short_item_threshold/20.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// rustfmt-short_item_threshold: 20

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// rustfmt-max_width: 20
// rustfmt-short_item_threshold: 30

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
11 changes: 11 additions & 0 deletions tests/target/configs/short_item_threshold/10.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// rustfmt-short_item_threshold: 10

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
8 changes: 8 additions & 0 deletions tests/target/configs/short_item_threshold/20.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// rustfmt-short_item_threshold: 20

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000, 0xaaaaaaaaaaaaaaaa, 0xbbbbbbbbbbbbbbbb, 0xcccccccccccccccc,
0xdddddddddddddddd,
];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// rustfmt-max_width: 20
// rustfmt-short_item_threshold: 30

fn main() {
pub const FORMAT_TEST: [u64; 5] = [
0x0000000000000000,
0xaaaaaaaaaaaaaaaa,
0xbbbbbbbbbbbbbbbb,
0xcccccccccccccccc,
0xdddddddddddddddd,
];
}

0 comments on commit 2c05365

Please sign in to comment.