From b5378edeebaba9a0c9e8b38e9dcbf20af24aa63e Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 15 May 2025 11:27:22 +0800 Subject: [PATCH] Fix inconsistent member chain format (#17470) Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- changelog_unreleased/javascript/17470.md | 22 +++++++++++++++++++ src/language-js/print/member-chain.js | 4 ++-- .../__snapshots__/format.test.js.snap | 16 ++++++++++++++ tests/format/js/method-chain/issue-17457.js | 1 + 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 changelog_unreleased/javascript/17470.md create mode 100644 tests/format/js/method-chain/issue-17457.js 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 });