Fix inconsistent call print between CallExpression and NewExpression (#18206)

This commit is contained in:
fisker Cheung authored and GitHub committed 2025-11-17 22:43:24 +08:00
1 parent 81859299b9
commit 35718f2993
8 files changed
+205 -2

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
#### Fix inconsistent print between `CallExpression` and `NewExpression` (#18206 by @fisker)
<!-- prettier-ignore -->
```jsx
// Input
TelemetryTrustedValue(
instance.capabilities.get(
TerminalCapability?.PromptTypeDetection
)?.promptType
)
new TelemetryTrustedValue(
instance.capabilities.get(
TerminalCapability?.PromptTypeDetection
)?.promptType
)
// Prettier stable
TelemetryTrustedValue(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
new TelemetryTrustedValue(
instance.capabilities.get(
TerminalCapability?.PromptTypeDetection,
)?.promptType,
);
// Prettier main
TelemetryTrustedValue(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
new TelemetryTrustedValue(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
)
```
+21 -2
View File
@@ -14,6 +14,25 @@ const isCallExpressionWithArguments = (node) => {
return isCallExpression(node) && getCallArguments(node).length > 0;
};
function shouldInlineNewExpressionCallee(path) {
let { node: child, ancestors } = path;
for (const ancestor of ancestors) {
if (
!(
(isMemberExpression(ancestor) && ancestor.object === child) ||
(ancestor.type === "TSNonNullExpression" &&
ancestor.expression === child)
)
) {
return ancestor.type === "NewExpression" && ancestor.callee === child;
}
child = ancestor;
}
return false;
}
function printMemberExpression(path, options, print) {
const objectDoc = print("object");
const lookupDoc = printMemberLookup(path, options, print);
@@ -29,10 +48,10 @@ function printMemberExpression(path, options, print) {
const shouldInline =
(firstNonMemberParent &&
(firstNonMemberParent.type === "NewExpression" ||
firstNonMemberParent.type === "BindExpression" ||
(firstNonMemberParent.type === "BindExpression" ||
(firstNonMemberParent.type === "AssignmentExpression" &&
firstNonMemberParent.left.type !== "Identifier"))) ||
shouldInlineNewExpressionCallee(path) ||
node.computed ||
(node.object.type === "Identifier" &&
node.property.type === "Identifier" &&
+14
View File
@@ -0,0 +1,14 @@
callExprssion(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
optionalCallExprssion?.(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
new NewExpression(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
@@ -28,6 +28,46 @@ foo(a--).bar().leet();
================================================================================
`;
exports[`18171.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
callExprssion(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
optionalCallExprssion?.(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
new NewExpression(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
=====================================output=====================================
callExprssion(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
optionalCallExprssion?.(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
new NewExpression(
instance.capabilities.get(TerminalCapability?.PromptTypeDetection)
?.promptType,
);
================================================================================
`;
exports[`array-and-object.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
@@ -67,6 +67,13 @@ function functionName() {
}
}
foo = new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
=====================================output=====================================
function functionName() {
// indent to make the line break
@@ -79,5 +86,18 @@ function functionName() {
}
}
foo =
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
foo =
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
================================================================================
`;
@@ -8,3 +8,10 @@ function functionName() {
);
}
}
foo = new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
@@ -140,3 +140,53 @@ interface TimerConstructor {
================================================================================
`;
exports[`with-member-expression.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
foo = new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(x);
=====================================output=====================================
foo =
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
foo =
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
foo =
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
foo =
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(
x,
);
================================================================================
`;
@@ -0,0 +1,13 @@
foo = new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
new long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member.long_long_member.long_long_member.long_long_member.long_long_member(x);
foo = long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member();
long_long_member!.long_long_member.long_long_member.long_long_member.long_long_member(x);