From ef77997caf120fa3b8864a9ff35783a651b7bc82 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Sun, 12 Oct 2025 16:13:19 +0000 Subject: [PATCH] fix(formatter): correct printing comments for `for` statements (#14473) --- crates/oxc_formatter/src/write/mod.rs | 4 +-- .../fixtures/js/comments/for-statements.js | 11 +++++++ .../js/comments/for-statements.js.snap | 31 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js create mode 100644 crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js.snap diff --git a/crates/oxc_formatter/src/write/mod.rs b/crates/oxc_formatter/src/write/mod.rs index 52a62458ec009..8ced33109639f 100644 --- a/crates/oxc_formatter/src/write/mod.rs +++ b/crates/oxc_formatter/src/write/mod.rs @@ -659,7 +659,7 @@ impl<'a> FormatWrite<'a> for AstNode<'a, ForStatement<'a>> { impl<'a> FormatWrite<'a> for AstNode<'a, ForInStatement<'a>> { fn write(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> { - let comments = f.context().comments().own_line_comments_before(self.body.span().start); + let comments = f.context().comments().own_line_comments_before(self.right.span().start); write!( f, [ @@ -683,7 +683,7 @@ impl<'a> FormatWrite<'a> for AstNode<'a, ForInStatement<'a>> { impl<'a> FormatWrite<'a> for AstNode<'a, ForOfStatement<'a>> { fn write(&self, f: &mut Formatter<'_, 'a>) -> FormatResult<()> { - let comments = f.context().comments().own_line_comments_before(self.body.span().start); + let comments = f.context().comments().own_line_comments_before(self.right.span().start); let r#await = self.r#await(); let left = self.left(); diff --git a/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js b/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js new file mode 100644 index 0000000000000..45580d887d932 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js @@ -0,0 +1,11 @@ +for (let i in [ + // comment1 + 1, 2, 3 + // comment2 +]); + +for (let i of [ + // comment1 + 1, 2, 3 + // comment2 +]); \ No newline at end of file diff --git a/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js.snap b/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js.snap new file mode 100644 index 0000000000000..ebbae9dab608e --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/comments/for-statements.js.snap @@ -0,0 +1,31 @@ +--- +source: crates/oxc_formatter/tests/fixtures/mod.rs +--- +==================== Input ==================== +for (let i in [ + // comment1 + 1, 2, 3 + // comment2 +]); + +for (let i of [ + // comment1 + 1, 2, 3 + // comment2 +]); +==================== Output ==================== +for (let i in [ + // comment1 + 1, 2, + 3, + // comment2 +]); + +for (let i of [ + // comment1 + 1, 2, + 3, + // comment2 +]); + +===================== End =====================