Open
Description
Given the following src/lib.rs
:
trait AllTheOthers1:
Trait3 + Trait4 + Trait5 + Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait14
{
}
trait AllTheOthers2:
Trait4 + Trait5 + Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait13 + Trait15
{
}
mod Module {
trait AllTheOthers3:
Trait5 + Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait13 + Trait14
{
}
trait AllTheOthers4:
Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait13 + Trait14 + Trait15
{
}
}
rustfmt
produces:
trait AllTheOthers1:
Trait3 + Trait4 + Trait5 + Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait14
{
}
trait AllTheOthers2:
Trait4
+ Trait5
+ Trait6
+ Trait7
+ Trait8
+ Trait9
+ Trait10
+ Trait11
+ Trait12
+ Trait13
+ Trait15
{
}
mod Module {
trait AllTheOthers3:
Trait5 + Trait6 + Trait7 + Trait8 + Trait9 + Trait10 + Trait11 + Trait12 + Trait13 + Trait14
{
}
trait AllTheOthers4:
Trait6
+ Trait7
+ Trait8
+ Trait9
+ Trait10
+ Trait11
+ Trait12
+ Trait13
+ Trait14
+ Trait15
{
}
}
The line lengths for the supertrait bounds before formatting were
AllTheOthers1
: 104AllTheOthers2
: 105AllTheOthers3
: 100AllTheOthers4
: 101
As expected, rustfmt
reformatted the AllTheOthers2
and AllTheOthers4
supertraits, but it left the AllTheOthers1
supertraits as-is at 104 characters.
This seems related to indentation: if I change tab_spaces
to 3 instead of 4, the reformatting outside the module occurs when the supertraits line reaches 104 characters instead of 105. (Inside the module, things still work as expected and even a 101-character line gets reformatted).
$ rustfmt -V
rustfmt 1.4.38-stable (7737e0b5 2022-04-04)
My rustfmt
config should just be the default:
$ rustfmt --print-config current .
max_width = 100
hard_tabs = false
tab_spaces = 4
newline_style = "Auto"
indent_style = "Block"
use_small_heuristics = "Default"
fn_call_width = 60
attr_fn_like_width = 70
struct_lit_width = 18
struct_variant_width = 35
array_width = 60
chain_width = 60
single_line_if_else_max_width = 50
wrap_comments = false
format_code_in_doc_comments = false
comment_width = 80
normalize_comments = false
normalize_doc_attributes = false
license_template_path = ""
format_strings = false
format_macro_matchers = false
format_macro_bodies = true
hex_literal_case = "Preserve"
empty_item_single_line = true
struct_lit_single_line = true
fn_single_line = false
where_single_line = false
imports_indent = "Block"
imports_layout = "Mixed"
imports_granularity = "Preserve"
group_imports = "Preserve"
reorder_imports = true
reorder_modules = true
reorder_impl_items = false
type_punctuation_density = "Wide"
space_before_colon = false
space_after_colon = true
spaces_around_ranges = false
binop_separator = "Front"
remove_nested_parens = true
combine_control_expr = true
overflow_delimited_expr = false
struct_field_align_threshold = 0
enum_discrim_align_threshold = 0
match_arm_blocks = true
match_arm_leading_pipes = "Never"
force_multiline_blocks = false
fn_args_layout = "Tall"
brace_style = "SameLineWhere"
control_brace_style = "AlwaysSameLine"
trailing_semicolon = true
trailing_comma = "Vertical"
match_block_trailing_comma = false
blank_lines_upper_bound = 1
blank_lines_lower_bound = 0
edition = "2015"
version = "One"
inline_attribute_width = 0
format_generated_files = true
merge_derives = true
use_try_shorthand = false
use_field_init_shorthand = false
force_explicit_abi = true
condense_wildcard_suffixes = false
color = "Auto"
required_version = "1.4.38"
unstable_features = false
disable_all_formatting = false
skip_children = false
hide_parse_errors = false
error_on_line_overflow = false
error_on_unformatted = false
report_todo = "Never"
report_fixme = "Never"
ignore = []
emit_mode = "Files"
make_backup = false