rust-lang / rustfmt

Format Rust code
https://rust-lang.github.io/rustfmt/
Apache License 2.0
6.06k stars 892 forks source link

rustfmt forcefully moves trailing comments to irrelevant code above (and not idempotent either) #6347

Open msrd0 opened 2 months ago

msrd0 commented 2 months ago

I sometimes write enums with a comment at the end saying something like "I should add foo in the future". Like

enum MyEnum {
    Bar,

    // I should add Foo
}

Unfortunately, rustfmt thinks it would be wise to reformat this into

enum MyEnum {
    Bar,
    // I should add Foo
}

Even worse, when enabling trailing_comma = "Never", I get the non-idempotent output where first it looks like above without the trailing comma, and then gets moved even further up:

enum MyEnum {
    Bar // I should add Foo
}

That formatting is very far from my original intention when writing code, and actively hinders readability as one might now ask why the comment should be related to that last enum variant. I think the behaviour should be changed so that rustfmt leaves the trailing comment with an empty newline as it is.

ytmimi commented 2 months ago

@msrd0 thanks for the report.

What version of rustfmt are you using?

msrd0 commented 2 months ago

For the version with no parameters, I used play.rust-lang.org which claims to use 1.7.1-stable (2024-09-04 eeb90cd).

For the version with trailing_comma = "Never", I used rustfmt 1.7.1-nightly (5aea140 2024-08-20).

ytmimi commented 1 month ago

I believe this is related to https://github.com/rust-lang/rustfmt/issues/4757