rustfmt
rustfmt copied to clipboard
Fmt failure with wrap_comments = true
When having wrap_comments = true, running rustfmt on the following code produces an error:
fn f() {
g({
// some trailing spaces on the line below - this needs to be inside the g call
SomeStruct {
a: b, // // This needs two sets of the slash-slash comments, and this needs to be a very long sentence so bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
};
})
.x; // the .something needs to be here
}
The produces error is error[internal]: left behind trailing whitespace
Thanks for the report.
Stripping back the example to just the following:
fn f() {
{
{
SomeStruct {
a: b, // // This needs two sets of the slash-slash comments, and this needs to be a very long sentence so bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
};
}
}
}
when we run rustfmt the line comment is changed into a block comment, but it isn't wrapped so it stays really long:
fn f() {
{
{
SomeStruct {
a: b, /* // This needs two sets of the slash-slash comments, and this needs to be a very long sentence so bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla */
};
}
}
}
Then because we're dealing with a chain e.g. g().x, we hit the same issues that's causing #3863, and we don't reformat the any part of the chain, which means we leave the trailing whitespace. which is causing the warning that you're seeing.
But I can also confirm that with the original example using wrap_comment=false the trailing whitespace is removed, and with wrap_comments=true the trailing whitespace remains after formatting. Interesting 🤔
if it helps at all, I believe I encountered the same bug.
This code:
mod phase {
pub trait Phase {
const RUN: &'static str;
const FAIL: &'static str;
fn to_style(&self, template: &str);
}
pub struct Updating {}
impl Phase for Updating {
const RUN: &'static str = "";
const FAIL: &'static str = "";
#[rustfmt::skip]
fn to_style(&self, template: &str) {}
}
}
fn main() {}
produces this error:
error[internal]: left behind trailing whitespace
--> /tmp/arif/src/main.rs:14:14:1
|
14 |
| ^^^^^^^^^^^^
|
@arifd Thanks for providing another example. I think the error[internal]: left behind trailing whitespace you're getting is unrelated to the original issue. Your error is unrelated to wrap_comments=true as I was able to reproduce it with wrap_comments=false. Your input snippet contained whitespace on line 14 that rustfmt was unable to remove. I haven't looked into this at all, but I'd assume it has to do with the #[rustfmt::skip] attribute.
I think it would be best to file a new issue for your case.
Okay, thanks. created: https://github.com/rust-lang/rustfmt/issues/5521