Don't skip ChainExpression in isMemberExpression (#18652)

This commit is contained in:
fisker Cheung authored and GitHub committed 2026-01-16 11:10:47 +08:00
1 parent a797d40e2f
commit ece892d6f0
8 files changed
+56 -10

No files matched your search

+22
View File
@@ -0,0 +1,22 @@
#### Fix inconsistent formatting of class superClass (#18652 by @fisker)
<!-- prettier-ignore -->
```tsx
// Input
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName
extends foo.bar.Baz {}
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName
extends foo.bar.Baz! {}
// Prettier stable
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName
extends foo.bar.Baz {}
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName extends (foo
.bar.Baz!) {}
// Prettier main
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName
extends foo.bar.Baz {}
class ALongLongLongLongLongLongLongLongLongLongLongLongClassName
extends (foo.bar.Baz!) {}
```
@@ -1243,6 +1243,7 @@ function isDecoratorMemberExpression(node) {
if (isMemberExpression(node)) {
return (
!node.computed &&
// @ts-expect-error -- doesn't exists on `MemberExpression`
!node.optional &&
node.property.type === "Identifier" &&
isDecoratorMemberExpression(node.object)
+12 -1
View File
@@ -168,6 +168,17 @@ function hasMultipleHeritage(node) {
return count > 1;
}
function isMemberish(node) {
if (
node?.type === "ChainExpression" ||
node?.type === "TSNonNullExpression"
) {
return isMemberish(node.expression);
}
return isMemberExpression(node);
}
/**
@returns {boolean}
*/
@@ -187,7 +198,7 @@ function shouldPrintClassInGroupModeWithoutCache(path) {
return false;
}
return !node.superTypeArguments && isMemberExpression(node.superClass);
return !node.superTypeArguments && isMemberish(node.superClass);
}
const heritage =
+4 -3
View File
@@ -146,10 +146,11 @@ function shouldExtraIndentForConditionalExpression(path) {
const node = path.getParentNode(ancestorCount);
if (
(node.type === "ChainExpression" && node.expression === child) ||
((node.type === "ChainExpression" ||
node.type === "TSNonNullExpression") &&
node.expression === child) ||
(isCallExpression(node) && node.callee === child) ||
(isMemberExpression(node) && node.object === child) ||
(node.type === "TSNonNullExpression" && node.expression === child)
(isMemberExpression(node) && node.object === child)
) {
child = node;
continue;
+4 -3
View File
@@ -103,10 +103,11 @@ function shouldExtraIndentForConditionalExpression(path) {
const node = path.getParentNode(ancestorCount);
if (
(node.type === "ChainExpression" && node.expression === child) ||
((node.type === "ChainExpression" ||
node.type === "TSNonNullExpression") &&
node.expression === child) ||
(isCallExpression(node) && node.callee === child) ||
(isMemberExpression(node) && node.object === child) ||
(node.type === "TSNonNullExpression" && node.expression === child)
(isMemberExpression(node) && node.object === child)
) {
child = node;
continue;
+4 -3
View File
@@ -380,9 +380,10 @@ const isCallExpression = skipChainExpression(
createTypeCheckFunction(["CallExpression", "OptionalCallExpression"]),
);
const isMemberExpression = skipChainExpression(
createTypeCheckFunction(["MemberExpression", "OptionalMemberExpression"]),
);
const isMemberExpression = createTypeCheckFunction([
"MemberExpression",
"OptionalMemberExpression",
]);
/**
* Attempts to gauge the rough complexity of a node, for example
@@ -15,6 +15,9 @@ class Short
class A_long_long_long_long_long_long_long_long_name12
extends eslint.Rule?.RuleModule {}
class A_long_long_long_long_long_long_long_long_name12
extends eslint.Rule.RuleModule! {}
interface A_long_long_long_long_long_long_long_long_name2
extends eslint.Rule.RuleModule {}
@@ -34,6 +37,9 @@ class Short extends eslint.Rule.RuleModule {}
class A_long_long_long_long_long_long_long_long_name12
extends eslint.Rule?.RuleModule {}
class A_long_long_long_long_long_long_long_long_name12
extends (eslint.Rule.RuleModule!) {}
interface A_long_long_long_long_long_long_long_long_name2
extends eslint.Rule.RuleModule {}
@@ -7,6 +7,9 @@ class Short
class A_long_long_long_long_long_long_long_long_name12
extends eslint.Rule?.RuleModule {}
class A_long_long_long_long_long_long_long_long_name12
extends eslint.Rule.RuleModule! {}
interface A_long_long_long_long_long_long_long_long_name2
extends eslint.Rule.RuleModule {}