rust-lang/rustfmt

rustfmt changes code between stable and beta

Manishearth opened this issue ยท 3 comments

With the following code:

fn main() {
    let arr = [
        ("en-001", "", "Hello from ๐Ÿ—บ๏ธ"),  // WORLD
        ("en-002", "", "Hello from ๐ŸŒ"), // AFRICA
    ];
}

playground

rustfmt considers it correctly formatted under Rust 1.79, but will remove the space before // WORLD under Rust 1.80-beta3 (and nightly)

This is caused by unicode-width 0.1.13, which changed the predicted widths of a lot of Unicode characters, including emoji. The new version is more accurate, but these changes have not been made in a way that guarantees any kind of stability. The issue I have filed asks for such an API.

In the meantime, should rust/rustfmt pin to 0.1.2?

From the README:

The following list enumerates areas where Rustfmt does not work or where the stability guarantees do not apply (we don't make a distinction between the two because in the future Rustfmt might work on code where it currently does not):

  • [โ€ฆ]
  • Code containing non-ascii unicode characters

Ah, cool.

agreed not guaranteed to have stable formatting in this particular case but good find and thank you for sharing it

probably worth a mention in the relnotes and blog post for the release though. if that ship hasn't already sailed i can look into it later tonight