diff --git a/changelog_unreleased/javascript/17470.md b/changelog_unreleased/javascript/17470.md new file mode 100644 index 000000000..9d3907fd9 --- /dev/null +++ b/changelog_unreleased/javascript/17470.md @@ -0,0 +1,22 @@ +#### Fix inconsistent member chain format (#17470 by @fisker) + + +```jsx +// Input +s.get(u)?.trigger({ triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123 }); + +// Prettier stable (--parser=babel) +s.get(u)?.trigger({ + triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123, +}); + +// Prettier stable (--parser=typescript) +s + .get(u) + ?.trigger({ triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123 }); + +// Prettier main +s.get(u)?.trigger({ + triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123, +}); +``` diff --git a/src/language-js/print/member-chain.js b/src/language-js/print/member-chain.js index 01037a0f0..57c6d1592 100644 --- a/src/language-js/print/member-chain.js +++ b/src/language-js/print/member-chain.js @@ -58,9 +58,9 @@ function printMemberChain(path, options, print) { ); } - const { parent } = path; const isExpressionStatement = - !parent || parent.type === "ExpressionStatement"; + (path.parent.type === "ChainExpression" ? path.grandparent : path.parent) + .type === "ExpressionStatement"; // The first phase is to linearize the AST by traversing it down. // diff --git a/tests/format/js/method-chain/__snapshots__/format.test.js.snap b/tests/format/js/method-chain/__snapshots__/format.test.js.snap index 300367832..b6ba83d91 100644 --- a/tests/format/js/method-chain/__snapshots__/format.test.js.snap +++ b/tests/format/js/method-chain/__snapshots__/format.test.js.snap @@ -1249,6 +1249,22 @@ foo1(/叱叱叱/) ================================================================================ `; +exports[`issue-17457.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "flow", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +s.get(u)?.trigger({ triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123 }); + +=====================================output===================================== +s.get(u)?.trigger({ + triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123, +}); + +================================================================================ +`; + exports[`logical.js format 1`] = ` ====================================options===================================== parsers: ["babel", "flow", "typescript"] diff --git a/tests/format/js/method-chain/issue-17457.js b/tests/format/js/method-chain/issue-17457.js new file mode 100644 index 000000000..a7cf0457b --- /dev/null +++ b/tests/format/js/method-chain/issue-17457.js @@ -0,0 +1 @@ +s.get(u)?.trigger({ triggerKind: y.SignatureHelpTriggerKind.InvokeFooBarBaz123 });