From 2ce28f3b895259141ddac73bfa9dce376b0e234c Mon Sep 17 00:00:00 2001 From: magic-akari Date: Fri, 2 Jan 2026 09:56:39 +0800 Subject: [PATCH] fix(formatter): don't move comments into optional call parentheses --- .../src/utils/member_chain/chain_member.rs | 2 +- .../fixtures/ts/member-chains/issue-17570.ts | 13 ++++++ .../ts/member-chains/issue-17570.ts.snap | 42 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts create mode 100644 crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts.snap diff --git a/crates/oxc_formatter/src/utils/member_chain/chain_member.rs b/crates/oxc_formatter/src/utils/member_chain/chain_member.rs index 49b57f4213102..a2d8ecb4ab481 100644 --- a/crates/oxc_formatter/src/utils/member_chain/chain_member.rs +++ b/crates/oxc_formatter/src/utils/member_chain/chain_member.rs @@ -84,7 +84,7 @@ impl<'a> Format<'a> for ChainMember<'a, '_> { ); // `A.b /* comment */ (c)` -> `A.b(/* comment */ c)` - if !matches!(member.parent, AstNodes::CallExpression(call) if call.type_arguments.is_none()) + if !matches!(member.parent, AstNodes::CallExpression(call) if call.type_arguments.is_none() && !call.optional) { member.format_trailing_comments(f); } diff --git a/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts b/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts new file mode 100644 index 0000000000000..9544fe743a94a --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts @@ -0,0 +1,13 @@ +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +this + .getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +foo + .getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); diff --git a/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts.snap b/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts.snap new file mode 100644 index 0000000000000..df7eb32be3799 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/ts/member-chains/issue-17570.ts.snap @@ -0,0 +1,42 @@ +--- +source: crates/oxc_formatter/tests/fixtures/mod.rs +--- +==================== Input ==================== +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +this + .getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +foo + .getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */ + ?.(); + +==================== Output ==================== +------------------ +{ printWidth: 80 } +------------------ +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +foo.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +------------------- +{ printWidth: 100 } +------------------- +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +this.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +foo.getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +getParameters /* xxxxxxxxxxxxxxxxxxxxxxxxxxxx */?.(); + +===================== End =====================