rust-lang / rustfmt

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

Off-by-two error wrapping line with use_small_heuristics Max #6219

Open ia0 opened 4 months ago

ia0 commented 4 months ago
% rustfmt --version
rustfmt 1.7.1-nightly (fda509e 2024-06-25)

Content of src/main.rs:

/*
0         1         2         3         4         5         6         7         8         9
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
*/

fn main() {
    // This line has 100 characters ...............................................................9
    let connection = candidate.connect(Duration::from_secs(1)).context("connecting to the device")?;
    // This line has 99 characters ...............................................................8
    let connection = candidate.connect(Duration::from_secs(1)).context("connecting to the devic")?;
    // This line has 98 characters ..............................................................7
    let connection = candidate.connect(Duration::from_secs(1)).context("connecting to the devi")?;
}

Content of rustfmt.toml:

comment_width = 100
use_small_heuristics = "Max"

Expected formatting is that nothing changes. The file is already correctly formatted.

Actual formatting is the following (lines with 100 and 99 characters are wrapped):

/*
0         1         2         3         4         5         6         7         8         9
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
*/

fn main() {
    // This line has 100 characters ...............................................................9
    let connection =
        candidate.connect(Duration::from_secs(1)).context("connecting to the device")?;
    // This line has 99 characters ...............................................................8
    let connection =
        candidate.connect(Duration::from_secs(1)).context("connecting to the devic")?;
    // This line has 98 characters ..............................................................7
    let connection = candidate.connect(Duration::from_secs(1)).context("connecting to the devi")?;
}

Maybe it's related to #6180? Or maybe it's how use_small_heuristics = Max is supposed to work since the documentation doesn't say anything.

ytmimi commented 4 months ago

Thanks for the report! I think this is the same issue that was discussed in https://github.com/rust-lang/rustfmt/pull/6149#discussion_r1569703726

ia0 commented 4 months ago

Thanks! I'll follow that PR.