Prevent enum variant attributes from wrapping one character early

Fixes 5801 when using `version=Two`

Previously, doc comments would wrap one character less than the
`comment_width` when using `wrap_comments=true`, and fn-like attributes
would wrap one character before the `attr_fn_like_width`.

Now, when using `version=Two` enum variant attributes won't wrap early
This commit is contained in:
IVIURRAY 2024-01-08 15:06:25 +00:00 committed by GitHub
parent 75e3172aaa
commit 6356fca675
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 99 additions and 3 deletions

View File

@ -656,9 +656,16 @@ impl<'a> FmtVisitor<'a> {
}
let context = self.get_context();
// 1 = ','
let shape = self.shape().sub_width(1)?;
let attrs_str = field.attrs.rewrite(&context, shape)?;
let shape = self.shape();
let attrs_str = if context.config.version() == Version::Two {
field.attrs.rewrite(&context, shape)?
} else {
// Version::One formatting that was off by 1. See issue #5801
field.attrs.rewrite(&context, shape.sub_width(1)?)?
};
// sub_width(1) to take the trailing comma into account
let shape = shape.sub_width(1)?;
let lo = field
.attrs
.last()

View File

@ -0,0 +1,3 @@
max_width = 120
version = "One"
attr_fn_like_width = 120

View File

@ -0,0 +1,3 @@
max_width = 120
version = "Two"
attr_fn_like_width = 120

View File

@ -0,0 +1,8 @@
// rustfmt-config: issue-5801-v1.toml
pub enum Severity {
#[something(AAAAAAAAAAAAA, BBBBBBBBBBBBBB, CCCCCCCCCCCCCCCC, DDDDDDDDDDDDD, EEEEEEEEEEEE, FFFFFFFFFFF, GGGGGGGGGGG)]
AttrsWillWrap,
#[something_else(hhhhhhhhhhhhhhhh, iiiiiiiiiiiiiiii, jjjjjjjjjjjjjjj, kkkkkkkkkkkkk, llllllllllll, mmmmmmmmmmmmmm)]
AttrsWontWrap,
}

View File

@ -0,0 +1,17 @@
// rustfmt-comment_width: 120
// rustfmt-wrap_comments: true
// rustfmt-max_width: 120
// rustfmt-version: One
/// This function is 120 columns wide and is left alone. This comment is 120 columns wide and the formatter is also fine
fn my_super_cool_function_name(my_very_cool_argument_name: String, my_other_very_cool_argument_name: String) -> String {
unimplemented!()
}
pub enum Severity {
/// In version one, the below line got wrapped prematurely as we subtracted 1 to account for `,`. See issue #5801.
/// But here, this comment is 120 columns wide and the formatter wants to split it up onto two separate lines still.
Error,
/// This comment is 119 columns wide and works perfectly. Lorem ipsum. lorem ipsum. lorem ipsum. lorem ipsum lorem.
Warning,
}

View File

@ -0,0 +1,8 @@
// rustfmt-config: issue-5801-v2.toml
pub enum Severity {
#[something(AAAAAAAAAAAAA, BBBBBBBBBBBBBB, CCCCCCCCCCCCCCCC, DDDDDDDDDDDDD, EEEEEEEEEEEE, FFFFFFFFFFF, GGGGGGGGGGG)]
AttrsWillWrap,
#[something_else(hhhhhhhhhhhhhhhh, iiiiiiiiiiiiiiii, jjjjjjjjjjjjjjj, kkkkkkkkkkkkk, llllllllllll, mmmmmmmmmmmmmm)]
AttrsWontWrap,
}

View File

@ -0,0 +1,16 @@
// rustfmt-config: issue-5801-v1.toml
pub enum Severity {
#[something(
AAAAAAAAAAAAA,
BBBBBBBBBBBBBB,
CCCCCCCCCCCCCCCC,
DDDDDDDDDDDDD,
EEEEEEEEEEEE,
FFFFFFFFFFF,
GGGGGGGGGGG
)]
AttrsWillWrap,
#[something_else(hhhhhhhhhhhhhhhh, iiiiiiiiiiiiiiii, jjjjjjjjjjjjjjj, kkkkkkkkkkkkk, llllllllllll, mmmmmmmmmmmmmm)]
AttrsWontWrap,
}

View File

@ -0,0 +1,16 @@
// rustfmt-comment_width: 120
// rustfmt-wrap_comments: true
// rustfmt-max_width: 120
// rustfmt-version: Two
/// This function is 120 columns wide and is left alone. This comment is 120 columns wide and the formatter is also fine
fn my_super_cool_function_name(my_very_cool_argument_name: String, my_other_very_cool_argument_name: String) -> String {
unimplemented!()
}
pub enum Severity {
/// But here, this comment is 120 columns wide and the formatter wants to split it up onto two separate lines still.
Error,
/// This comment is 119 columns wide and works perfectly. Lorem ipsum. lorem ipsum. lorem ipsum. lorem ipsum lorem.
Warning,
}

View File

@ -0,0 +1,18 @@
// rustfmt-comment_width: 120
// rustfmt-wrap_comments: true
// rustfmt-max_width: 120
// rustfmt-version: One
/// This function is 120 columns wide and is left alone. This comment is 120 columns wide and the formatter is also fine
fn my_super_cool_function_name(my_very_cool_argument_name: String, my_other_very_cool_argument_name: String) -> String {
unimplemented!()
}
pub enum Severity {
/// In version one, the below line got wrapped prematurely as we subtracted 1 to account for `,`. See issue #5801.
/// But here, this comment is 120 columns wide and the formatter wants to split it up onto two separate lines
/// still.
Error,
/// This comment is 119 columns wide and works perfectly. Lorem ipsum. lorem ipsum. lorem ipsum. lorem ipsum lorem.
Warning,
}