rust-lang / rustfmt

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

Misaligned indentation of formatted string literal lines #4323

Open ayazhafiz opened 4 years ago

ayazhafiz commented 4 years ago

Only with option format_string true.

re https://github.com/rust-lang/rustfmt/issues/4321#issuecomment-657157584

Input

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack = "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \
sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \
tempus vel, gravida nec quam.

Nam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \
feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet id \
vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \
leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \
malesuada sollicitudin quam eu fermentum.";
}

and

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack = "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \
eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \
sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \
tempus vel, gravida nec quam.";
}

Output

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack =
        "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
         ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis \
         sed orci eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. \
         Integer fringilla non sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. \
         Morbi mauris dui, ultricies nec tempus vel, gravida nec quam.

Nam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \
         feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet \
         id vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec \
         mollis risus eu leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi \
         euismod vehicula. Nulla malesuada sollicitudin quam eu fermentum.";
}

and

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack = "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
                    ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam \
                    malesuada in. Duis sed orci eros. Suspendisse sit amet magna mollis, mollis \
                    nunc luctus, imperdiet mi. Integer fringilla non sem ut lacinia. Fusce varius \
                    tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec tempus \
                    vel, gravida nec quam.";
}

Respectively

Expected output

Better and consistent indentation of lines in the string. In particular, the first example should not change or be

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack =
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
         ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis \
         sed orci eros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. \
         Integer fringilla non sem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. \
         Morbi mauris dui, ultricies nec tempus vel, gravida nec quam.

Nam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \
         feugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet \
         id vehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec \
         mollis risus eu leo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi \
         euismod vehicula. Nulla malesuada sollicitudin quam eu fermentum.";
}

and the second example could be

fn bench_contains_short_long(b: &mut Bencher) {
    let haystack = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \
                    ultricies condimentum. Praesent iaculis purus elit, ac malesuada quam \
                    malesuada in. Duis sed orci eros. Suspendisse sit amet magna mollis, mollis \
                    nunc luctus, imperdiet mi. Integer fringilla non sem ut lacinia. Fusce varius \
                    tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec tempus \
                    vel, gravida nec quam.";
}

Meta

ytmimi commented 2 years ago

confirming this is reproducible with rustfmt 1.5.1-nightly (a451a39d 2022-07-25)