Fix member chain print (#18720)
This commit is contained in:
1 parent
108c3f5c94
commit
6690ebd09b
9 files changed
+95
-81
No files matched your search
@@ -0,0 +1,13 @@
|
||||
#### Fix missing parentheses around optional chaining (#18720 by @fisker)
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
// Input
|
||||
(a?.b()).c();
|
||||
|
||||
// Prettier stable
|
||||
a?.b().c();
|
||||
|
||||
// Prettier main
|
||||
(a?.b()).c();
|
||||
```
|
||||
@@ -848,7 +848,6 @@ function needsParentheses(path, options) {
|
||||
while (object) {
|
||||
switch (object.type) {
|
||||
case "CallExpression":
|
||||
case "OptionalCallExpression":
|
||||
return true;
|
||||
case "MemberExpression":
|
||||
case "OptionalMemberExpression":
|
||||
|
||||
@@ -93,7 +93,8 @@ function printMemberChain(path, options, print) {
|
||||
|
||||
if (
|
||||
isCallExpression(node) &&
|
||||
(isMemberish(node.callee) || isCallExpression(node.callee))
|
||||
(isMemberish(node.callee) || isCallExpression(node.callee)) &&
|
||||
!needsParentheses(path, options)
|
||||
) {
|
||||
const hasTrailingEmptyLine = shouldInsertEmptyLineAfter(node);
|
||||
printedNodes.unshift({
|
||||
@@ -113,10 +114,9 @@ function printMemberChain(path, options, print) {
|
||||
],
|
||||
});
|
||||
path.call(rec, "callee");
|
||||
} else if (isMemberish(node)) {
|
||||
} else if (isMemberish(node) && !needsParentheses(path, options)) {
|
||||
printedNodes.unshift({
|
||||
node,
|
||||
needsParens: needsParentheses(path, options),
|
||||
printed: printComments(
|
||||
path,
|
||||
isMemberExpression(node)
|
||||
@@ -126,10 +126,12 @@ function printMemberChain(path, options, print) {
|
||||
),
|
||||
});
|
||||
path.call(rec, "object");
|
||||
} else if (node.type === "TSNonNullExpression") {
|
||||
} else if (
|
||||
node.type === "TSNonNullExpression" &&
|
||||
!needsParentheses(path, options)
|
||||
) {
|
||||
printedNodes.unshift({
|
||||
node,
|
||||
needsParens: needsParentheses(path, options),
|
||||
printed: printComments(path, "!", options),
|
||||
});
|
||||
path.call(rec, "expression");
|
||||
|
||||
@@ -30,7 +30,7 @@ foo(a?.b);
|
||||
|
||||
// In optional chaining
|
||||
(a?.b())?.();
|
||||
// FIXME: (a?.b()).c?.();
|
||||
(a?.b()).c?.();
|
||||
|
||||
=====================================output=====================================
|
||||
// Member expressions
|
||||
@@ -57,7 +57,7 @@ foo(a?.b);
|
||||
|
||||
// In optional chaining
|
||||
a?.b()?.();
|
||||
// FIXME: (a?.b()).c?.();
|
||||
(a?.b()).c?.();
|
||||
|
||||
================================================================================
|
||||
`;
|
||||
@@ -264,7 +264,7 @@ new (a[b?.c]) ();
|
||||
new ((a?.b).c) ();
|
||||
new (a[b?.()]) ();
|
||||
new ((a?.b).c) ();
|
||||
// FIXME: new ((a?.()).b) ();
|
||||
new ((a?.()).b) ();
|
||||
|
||||
// Call expressions
|
||||
new (a?.()) ();
|
||||
@@ -290,7 +290,7 @@ new a[b?.c]();
|
||||
new (a?.b).c();
|
||||
new a[b?.()]();
|
||||
new (a?.b).c();
|
||||
// FIXME: new ((a?.()).b) ();
|
||||
new (a?.()).b();
|
||||
|
||||
// Call expressions
|
||||
new (a?.())();
|
||||
|
||||
@@ -22,4 +22,4 @@ foo(a?.b);
|
||||
|
||||
// In optional chaining
|
||||
(a?.b())?.();
|
||||
// FIXME: (a?.b()).c?.();
|
||||
(a?.b()).c?.();
|
||||
@@ -6,7 +6,7 @@ new (a[b?.c]) ();
|
||||
new ((a?.b).c) ();
|
||||
new (a[b?.()]) ();
|
||||
new ((a?.b).c) ();
|
||||
// FIXME: new ((a?.()).b) ();
|
||||
new ((a?.()).b) ();
|
||||
|
||||
// Call expressions
|
||||
new (a?.()) ();
|
||||
|
||||
@@ -24,7 +24,7 @@ printWidth: 80
|
||||
(a[b!?.c]) ();
|
||||
((a?.b).c)! ();
|
||||
((a?.b).c!) ();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
((a?.b!).c) ();
|
||||
((a!?.b).c) ();
|
||||
(a[b?.()])! ();
|
||||
(a[b?.()]!) ();
|
||||
@@ -33,8 +33,8 @@ printWidth: 80
|
||||
(a![b?.()]) ();
|
||||
((a?.b).c)! ();
|
||||
((a?.b).c!) ();
|
||||
// FIXME: ((a?.b)!.c) ();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
((a?.b)!.c) ();
|
||||
((a?.b!).c) ();
|
||||
((a!?.b).c) ();
|
||||
((a?.()).b)! ();
|
||||
((a?.()).b!) ();
|
||||
@@ -75,7 +75,7 @@ foo((a?.b)!);
|
||||
(a?.b()!)?.();
|
||||
(a?.b())!?.();
|
||||
(a?.b!()).c?.();
|
||||
// FIXME: (a?.b())!.c?.();
|
||||
(a?.b())!.c?.();
|
||||
|
||||
=====================================output=====================================
|
||||
// Member expressions
|
||||
@@ -96,7 +96,7 @@ a[b?.c!]();
|
||||
a[b!?.c]();
|
||||
(a?.b).c!();
|
||||
(a?.b).c!();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
(a?.b!).c();
|
||||
(a!?.b).c();
|
||||
a[b?.()]!();
|
||||
a[b?.()]!();
|
||||
@@ -105,8 +105,8 @@ a[b!?.()]();
|
||||
a![b?.()]();
|
||||
(a?.b).c!();
|
||||
(a?.b).c!();
|
||||
// FIXME: ((a?.b)!.c) ();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
(a?.b)!.c();
|
||||
(a?.b!).c();
|
||||
(a!?.b).c();
|
||||
(a?.()).b!();
|
||||
(a?.()).b!();
|
||||
@@ -147,7 +147,7 @@ foo((a?.b)!);
|
||||
a?.b()!?.();
|
||||
(a?.b())!?.();
|
||||
(a?.b!()).c?.();
|
||||
// FIXME: (a?.b())!.c?.();
|
||||
(a?.b())!.c?.();
|
||||
|
||||
================================================================================
|
||||
`;
|
||||
@@ -385,15 +385,15 @@ printWidth: 80
|
||||
| printWidth
|
||||
=====================================input======================================
|
||||
// Member expressions
|
||||
// FIXME: new (a?.b)! ();
|
||||
// FIXME: new (a?.b!) ();
|
||||
new (a?.b)! ();
|
||||
new (a?.b!) ();
|
||||
new (a!?.b) ();
|
||||
// FIXME: new (a.b?.c)! ();
|
||||
// FIXME: new (a.b?.c!) ();
|
||||
new (a.b?.c)! ();
|
||||
new (a.b?.c!) ();
|
||||
new (a.b!?.c) ();
|
||||
new (a!.b?.c) ();
|
||||
// FIXME: new (a?.b.c)! ();
|
||||
// FIXME: new (a?.b.c!) ();
|
||||
new (a?.b.c)! ();
|
||||
new (a?.b.c!) ();
|
||||
new (a?.b!.c) ();
|
||||
new (a!?.b.c) ();
|
||||
new (a[b?.c])! ();
|
||||
@@ -414,24 +414,24 @@ new ((a?.b).c!) ();
|
||||
new ((a?.b)!.c) ();
|
||||
new ((a?.b!).c) ();
|
||||
new ((a!?.b).c) ();
|
||||
// FIXME: new ((a?.()).b)! ();
|
||||
// FIXME: new ((a?.()).b!) ();
|
||||
// FIXME: new ((a?.())!.b) ();
|
||||
// FIXME: new ((a?.()!).b) ();
|
||||
// FIXME: new ((a!?.()).b) ();
|
||||
new ((a?.()).b)! ();
|
||||
new ((a?.()).b!) ();
|
||||
new ((a?.())!.b) ();
|
||||
new ((a?.()!).b) ();
|
||||
new ((a!?.()).b) ();
|
||||
|
||||
// Call expressions
|
||||
// FIXME: new (a?.())! ();
|
||||
// FIXME: new (a?.()!) ();
|
||||
new (a?.())! ();
|
||||
new (a?.()!) ();
|
||||
new (a!?.()) ();
|
||||
// FIXME: new (a.b.c?.())! ();
|
||||
// FIXME: new (a.b.c?.()!) ();
|
||||
new (a.b.c?.())! ();
|
||||
new (a.b.c?.()!) ();
|
||||
new (a.b.c!?.()) ();
|
||||
// FIXME: new (a.b?.c())! ();
|
||||
// FIXME: new (a.b?.c()!) ();
|
||||
new (a.b?.c())! ();
|
||||
new (a.b?.c()!) ();
|
||||
new (a.b!?.c()) ();
|
||||
// FIXME: new (a?.b.c())! ();
|
||||
// FIXME: new (a?.b.c()!) ();
|
||||
new (a?.b.c())! ();
|
||||
new (a?.b.c()!) ();
|
||||
new (a?.b!.c()) ();
|
||||
new (a(b?.c))! ();
|
||||
new (a(b?.c)!) ();
|
||||
@@ -455,15 +455,15 @@ new ((a?.b)!?.c)();
|
||||
|
||||
=====================================output=====================================
|
||||
// Member expressions
|
||||
// FIXME: new (a?.b)! ();
|
||||
// FIXME: new (a?.b!) ();
|
||||
new (a?.b)!();
|
||||
new (a?.b!)();
|
||||
new (a!?.b)();
|
||||
// FIXME: new (a.b?.c)! ();
|
||||
// FIXME: new (a.b?.c!) ();
|
||||
new (a.b?.c)!();
|
||||
new (a.b?.c!)();
|
||||
new (a.b!?.c)();
|
||||
new (a!.b?.c)();
|
||||
// FIXME: new (a?.b.c)! ();
|
||||
// FIXME: new (a?.b.c!) ();
|
||||
new (a?.b.c)!();
|
||||
new (a?.b.c!)();
|
||||
new (a?.b!.c)();
|
||||
new (a!?.b.c)();
|
||||
new a[b?.c]!();
|
||||
@@ -484,24 +484,24 @@ new (a?.b).c!();
|
||||
new (a?.b)!.c();
|
||||
new (a?.b!).c();
|
||||
new (a!?.b).c();
|
||||
// FIXME: new ((a?.()).b)! ();
|
||||
// FIXME: new ((a?.()).b!) ();
|
||||
// FIXME: new ((a?.())!.b) ();
|
||||
// FIXME: new ((a?.()!).b) ();
|
||||
// FIXME: new ((a!?.()).b) ();
|
||||
new (a?.()).b!();
|
||||
new (a?.()).b!();
|
||||
new (a?.())!.b();
|
||||
new (a?.()!).b();
|
||||
new (a!?.()).b();
|
||||
|
||||
// Call expressions
|
||||
// FIXME: new (a?.())! ();
|
||||
// FIXME: new (a?.()!) ();
|
||||
new (a?.())!();
|
||||
new (a?.()!)();
|
||||
new (a!?.())();
|
||||
// FIXME: new (a.b.c?.())! ();
|
||||
// FIXME: new (a.b.c?.()!) ();
|
||||
new (a.b.c?.())!();
|
||||
new (a.b.c?.()!)();
|
||||
new (a.b.c!?.())();
|
||||
// FIXME: new (a.b?.c())! ();
|
||||
// FIXME: new (a.b?.c()!) ();
|
||||
new (a.b?.c())!();
|
||||
new (a.b?.c()!)();
|
||||
new (a.b!?.c())();
|
||||
// FIXME: new (a?.b.c())! ();
|
||||
// FIXME: new (a?.b.c()!) ();
|
||||
new (a?.b.c())!();
|
||||
new (a?.b.c()!)();
|
||||
new (a?.b!.c())();
|
||||
new (a(b?.c)!)();
|
||||
new (a(b?.c)!)();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
(a[b!?.c]) ();
|
||||
((a?.b).c)! ();
|
||||
((a?.b).c!) ();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
((a?.b!).c) ();
|
||||
((a!?.b).c) ();
|
||||
(a[b?.()])! ();
|
||||
(a[b?.()]!) ();
|
||||
@@ -25,8 +25,8 @@
|
||||
(a![b?.()]) ();
|
||||
((a?.b).c)! ();
|
||||
((a?.b).c!) ();
|
||||
// FIXME: ((a?.b)!.c) ();
|
||||
// FIXME: ((a?.b!).c) ();
|
||||
((a?.b)!.c) ();
|
||||
((a?.b!).c) ();
|
||||
((a!?.b).c) ();
|
||||
((a?.()).b)! ();
|
||||
((a?.()).b!) ();
|
||||
@@ -67,4 +67,4 @@ foo((a?.b)!);
|
||||
(a?.b()!)?.();
|
||||
(a?.b())!?.();
|
||||
(a?.b!()).c?.();
|
||||
// FIXME: (a?.b())!.c?.();
|
||||
(a?.b())!.c?.();
|
||||
@@ -1,13 +1,13 @@
|
||||
// Member expressions
|
||||
// FIXME: new (a?.b)! ();
|
||||
// FIXME: new (a?.b!) ();
|
||||
new (a?.b)! ();
|
||||
new (a?.b!) ();
|
||||
new (a!?.b) ();
|
||||
// FIXME: new (a.b?.c)! ();
|
||||
// FIXME: new (a.b?.c!) ();
|
||||
new (a.b?.c)! ();
|
||||
new (a.b?.c!) ();
|
||||
new (a.b!?.c) ();
|
||||
new (a!.b?.c) ();
|
||||
// FIXME: new (a?.b.c)! ();
|
||||
// FIXME: new (a?.b.c!) ();
|
||||
new (a?.b.c)! ();
|
||||
new (a?.b.c!) ();
|
||||
new (a?.b!.c) ();
|
||||
new (a!?.b.c) ();
|
||||
new (a[b?.c])! ();
|
||||
@@ -28,24 +28,24 @@ new ((a?.b).c!) ();
|
||||
new ((a?.b)!.c) ();
|
||||
new ((a?.b!).c) ();
|
||||
new ((a!?.b).c) ();
|
||||
// FIXME: new ((a?.()).b)! ();
|
||||
// FIXME: new ((a?.()).b!) ();
|
||||
// FIXME: new ((a?.())!.b) ();
|
||||
// FIXME: new ((a?.()!).b) ();
|
||||
// FIXME: new ((a!?.()).b) ();
|
||||
new ((a?.()).b)! ();
|
||||
new ((a?.()).b!) ();
|
||||
new ((a?.())!.b) ();
|
||||
new ((a?.()!).b) ();
|
||||
new ((a!?.()).b) ();
|
||||
|
||||
// Call expressions
|
||||
// FIXME: new (a?.())! ();
|
||||
// FIXME: new (a?.()!) ();
|
||||
new (a?.())! ();
|
||||
new (a?.()!) ();
|
||||
new (a!?.()) ();
|
||||
// FIXME: new (a.b.c?.())! ();
|
||||
// FIXME: new (a.b.c?.()!) ();
|
||||
new (a.b.c?.())! ();
|
||||
new (a.b.c?.()!) ();
|
||||
new (a.b.c!?.()) ();
|
||||
// FIXME: new (a.b?.c())! ();
|
||||
// FIXME: new (a.b?.c()!) ();
|
||||
new (a.b?.c())! ();
|
||||
new (a.b?.c()!) ();
|
||||
new (a.b!?.c()) ();
|
||||
// FIXME: new (a?.b.c())! ();
|
||||
// FIXME: new (a?.b.c()!) ();
|
||||
new (a?.b.c())! ();
|
||||
new (a?.b.c()!) ();
|
||||
new (a?.b!.c()) ();
|
||||
new (a(b?.c))! ();
|
||||
new (a(b?.c)!) ();
|
||||
|
||||
Reference in new issue
Block a user