Skip to content

Commit c7b86e8

Browse files
author
Andy
authored
EntityNameExpression doesn't need to include ParenthesizedExpression (#21588)
1 parent 48c0af5 commit c7b86e8

File tree

5 files changed

+9
-19
lines changed

5 files changed

+9
-19
lines changed

Diff for: src/compiler/checker.ts

+5-15
Original file line numberDiff line numberDiff line change
@@ -1983,8 +1983,7 @@ namespace ts {
19831983
if (name.kind === SyntaxKind.QualifiedName) {
19841984
left = (<QualifiedName>name).left;
19851985
}
1986-
else if (name.kind === SyntaxKind.PropertyAccessExpression &&
1987-
(name.expression.kind === SyntaxKind.ParenthesizedExpression || isEntityNameExpression(name.expression))) {
1986+
else if (name.kind === SyntaxKind.PropertyAccessExpression) {
19881987
left = name.expression;
19891988
}
19901989
else {
@@ -2013,15 +2012,6 @@ namespace ts {
20132012
return undefined;
20142013
}
20152014
}
2016-
else if (name.kind === SyntaxKind.ParenthesizedExpression) {
2017-
// If the expression in parenthesizedExpression is not an entity-name (e.g. it is a call expression), it won't be able to successfully resolve the name.
2018-
// This is the case when we are trying to do any language service operation in heritage clauses.
2019-
// By return undefined, the getSymbolOfEntityNameOrPropertyAccessExpression will attempt to checkPropertyAccessExpression to resolve symbol.
2020-
// i.e class C extends foo()./*do language service operation here*/B {}
2021-
return isEntityNameExpression(name.expression) ?
2022-
resolveEntityName(name.expression as EntityNameOrEntityNameExpression, meaning, ignoreErrors, dontResolveAlias, location) :
2023-
undefined;
2024-
}
20252015
else {
20262016
Debug.assertNever(name, "Unknown entity name kind.");
20272017
}
@@ -24477,8 +24467,8 @@ namespace ts {
2447724467
}
2447824468
}
2447924469

24480-
if (entityName.parent.kind === SyntaxKind.ExportAssignment && isEntityNameExpression(<Identifier | PropertyAccessExpression>entityName)) {
24481-
return resolveEntityName(<EntityNameExpression>entityName,
24470+
if (entityName.parent.kind === SyntaxKind.ExportAssignment && isEntityNameExpression(entityName)) {
24471+
return resolveEntityName(entityName,
2448224472
/*all meanings*/ SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias);
2448324473
}
2448424474

@@ -24493,7 +24483,7 @@ namespace ts {
2449324483
entityName = <QualifiedName | PropertyAccessEntityNameExpression>entityName.parent;
2449424484
}
2449524485

24496-
if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
24486+
if (isHeritageClauseElementIdentifier(entityName)) {
2449724487
let meaning = SymbolFlags.None;
2449824488
// In an interface or class, we're definitely interested in a type.
2449924489
if (entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments) {
@@ -24509,7 +24499,7 @@ namespace ts {
2450924499
}
2451024500

2451124501
meaning |= SymbolFlags.Alias;
24512-
const entityNameSymbol = resolveEntityName(<EntityName>entityName, meaning);
24502+
const entityNameSymbol = isEntityNameExpression(entityName) ? resolveEntityName(entityName, meaning) : undefined;
2451324503
if (entityNameSymbol) {
2451424504
return entityNameSymbol;
2451524505
}

Diff for: src/compiler/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1638,7 +1638,7 @@ namespace ts {
16381638
multiLine?: boolean;
16391639
}
16401640

1641-
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
1641+
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
16421642
export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
16431643

16441644
export interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {

Diff for: src/compiler/utilities.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3286,7 +3286,7 @@ namespace ts {
32863286
&& isClassLike(node.parent.parent);
32873287
}
32883288

3289-
export function isEntityNameExpression(node: Expression): node is EntityNameExpression {
3289+
export function isEntityNameExpression(node: Node): node is EntityNameExpression {
32903290
return node.kind === SyntaxKind.Identifier ||
32913291
node.kind === SyntaxKind.PropertyAccessExpression && isEntityNameExpression((<PropertyAccessExpression>node).expression);
32923292
}

Diff for: tests/baselines/reference/api/tsserverlibrary.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ declare namespace ts {
983983
interface ObjectLiteralExpression extends ObjectLiteralExpressionBase<ObjectLiteralElementLike> {
984984
kind: SyntaxKind.ObjectLiteralExpression;
985985
}
986-
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
986+
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
987987
type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
988988
interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {
989989
kind: SyntaxKind.PropertyAccessExpression;

Diff for: tests/baselines/reference/api/typescript.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,7 @@ declare namespace ts {
983983
interface ObjectLiteralExpression extends ObjectLiteralExpressionBase<ObjectLiteralElementLike> {
984984
kind: SyntaxKind.ObjectLiteralExpression;
985985
}
986-
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
986+
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
987987
type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
988988
interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {
989989
kind: SyntaxKind.PropertyAccessExpression;

0 commit comments

Comments
 (0)