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 =====================