diff --git a/crates/oxc_formatter/src/parentheses/expression.rs b/crates/oxc_formatter/src/parentheses/expression.rs index cb9d1050b7604..c50bffacf0c84 100644 --- a/crates/oxc_formatter/src/parentheses/expression.rs +++ b/crates/oxc_formatter/src/parentheses/expression.rs @@ -666,8 +666,7 @@ impl NeedsParentheses<'_> for AstNode<'_, SequenceExpression<'_>> { AstNodes::ReturnStatement(_) | AstNodes::ThrowStatement(_) // There's a precedence for writing `x++, y++` - | AstNodes::ForStatement(_) - | AstNodes::SequenceExpression(_) => false, + | AstNodes::ForStatement(_) => false, AstNodes::ExpressionStatement(stmt) => !stmt.is_arrow_function_body(), _ => true, } diff --git a/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js b/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js new file mode 100644 index 0000000000000..52ee79e2176e4 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js @@ -0,0 +1,13 @@ +// Issue #18972 - nested sequence expressions should preserve parentheses +const nestedSequenceAbomination = + (1, + 2, + (1, + 2, + 3, + (1, 2, 3, 4), + (1, 2, 3, 4, 5, [1, 2, 3, 4, 5, 6].filter(x => x % 2 == 0))['0'])); + +// Simpler test cases +const simple = (1, (2, 3), 4); +const nested = ((1, 2), (3, 4)); diff --git a/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js.snap b/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js.snap new file mode 100644 index 0000000000000..266b71140e2e1 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/js/sequence-expression/nested-sequence.js.snap @@ -0,0 +1,50 @@ +--- +source: crates/oxc_formatter/tests/fixtures/mod.rs +--- +==================== Input ==================== +// Issue #18972 - nested sequence expressions should preserve parentheses +const nestedSequenceAbomination = + (1, + 2, + (1, + 2, + 3, + (1, 2, 3, 4), + (1, 2, 3, 4, 5, [1, 2, 3, 4, 5, 6].filter(x => x % 2 == 0))['0'])); + +// Simpler test cases +const simple = (1, (2, 3), 4); +const nested = ((1, 2), (3, 4)); + +==================== Output ==================== +------------------ +{ printWidth: 80 } +------------------ +// Issue #18972 - nested sequence expressions should preserve parentheses +const nestedSequenceAbomination = + (1, + 2, + (1, + 2, + 3, + (1, 2, 3, 4), + (1, 2, 3, 4, 5, [1, 2, 3, 4, 5, 6].filter((x) => x % 2 == 0))["0"])); + +// Simpler test cases +const simple = (1, (2, 3), 4); +const nested = ((1, 2), (3, 4)); + +------------------- +{ printWidth: 100 } +------------------- +// Issue #18972 - nested sequence expressions should preserve parentheses +const nestedSequenceAbomination = + (1, + 2, + (1, 2, 3, (1, 2, 3, 4), (1, 2, 3, 4, 5, [1, 2, 3, 4, 5, 6].filter((x) => x % 2 == 0))["0"])); + +// Simpler test cases +const simple = (1, (2, 3), 4); +const nested = ((1, 2), (3, 4)); + +===================== End =====================