From 8d06e911eff887e286f14279418e0a1cd9b80ea1 Mon Sep 17 00:00:00 2001 From: saberoueslati Date: Sun, 6 Sep 2026 00:30:48 +0100 Subject: [PATCH] Fix non-idempotent indentation of consecutive block comments --- src/missed_spans.rs | 4 +++- tests/source/issue-7019.rs | 36 ++++++++++++++++++++++++++++++++ tests/target/issue-7019.rs | 42 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 tests/source/issue-7019.rs create mode 100644 tests/target/issue-7019.rs diff --git a/src/missed_spans.rs b/src/missed_spans.rs index 0242094a752..f45a1242c97 100644 --- a/src/missed_spans.rs +++ b/src/missed_spans.rs @@ -245,7 +245,9 @@ impl<'a> FmtVisitor<'a> { .rev() .find(|rev_c| ![' ', '\t'].contains(rev_c)); - let fix_indent = last_char.map_or(true, |rev_c| ['{', '\n'].contains(&rev_c)); + let starts_output_line = !self.buffer.is_empty() && self.buffer.ends_with('\n'); + let fix_indent = + starts_output_line || last_char.map_or(true, |rev_c| ['{', '\n'].contains(&rev_c)); let mut on_same_line = false; let comment_indent = if fix_indent { diff --git a/tests/source/issue-7019.rs b/tests/source/issue-7019.rs new file mode 100644 index 00000000000..ebb7557fa4e --- /dev/null +++ b/tests/source/issue-7019.rs @@ -0,0 +1,36 @@ +fn two() -> usize { + /*A*/ /*B*/ + 1 + 2 +} + +fn three() -> usize { + /*A*/ /*B*/ /*C*/ + 1 + 2 +} + +fn nested() -> usize { + { + { + /*A*/ /*B*/ /*C*/ + 1 + 2 + } + } +} + +fn between_statements() -> usize { + let a = 1; + /*A*/ /*B*/ + let b = 2; + a + b +} + +fn trailing_inline() -> usize { + let a = 1; /*trailing*/ + a +} + +fn already_canonical() -> usize { + /*A*/ + /*B*/ + 1 + 2 +} diff --git a/tests/target/issue-7019.rs b/tests/target/issue-7019.rs new file mode 100644 index 00000000000..62f4383aac5 --- /dev/null +++ b/tests/target/issue-7019.rs @@ -0,0 +1,42 @@ +fn two() -> usize { + /*A*/ + /*B*/ + 1 + 2 +} + +fn three() -> usize { + /*A*/ + /*B*/ + /*C*/ + 1 + 2 +} + +fn nested() -> usize { + { + { + /*A*/ + /*B*/ + /*C*/ + 1 + 2 + } + } +} + +fn between_statements() -> usize { + let a = 1; + /*A*/ + /*B*/ + let b = 2; + a + b +} + +fn trailing_inline() -> usize { + let a = 1; /*trailing*/ + a +} + +fn already_canonical() -> usize { + /*A*/ + /*B*/ + 1 + 2 +}