Skip to content

Commit 97bf89e

Browse files
author
Andy Hanson
committed
EntityNameExpression doesn't need to include ParenthesizedExpression
1 parent be0fcd5 commit 97bf89e

File tree

5 files changed

+9
-19
lines changed

5 files changed

+9
-19
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1975,8 +1975,7 @@ namespace ts {
19751975
if (name.kind === SyntaxKind.QualifiedName) {
19761976
left = (<QualifiedName>name).left;
19771977
}
1978-
else if (name.kind === SyntaxKind.PropertyAccessExpression &&
1979-
(name.expression.kind === SyntaxKind.ParenthesizedExpression || isEntityNameExpression(name.expression))) {
1978+
else if (name.kind === SyntaxKind.PropertyAccessExpression) {
19801979
left = name.expression;
19811980
}
19821981
else {
@@ -2005,15 +2004,6 @@ namespace ts {
20052004
return undefined;
20062005
}
20072006
}
2008-
else if (name.kind === SyntaxKind.ParenthesizedExpression) {
2009-
// 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.
2010-
// This is the case when we are trying to do any language service operation in heritage clauses.
2011-
// By return undefined, the getSymbolOfEntityNameOrPropertyAccessExpression will attempt to checkPropertyAccessExpression to resolve symbol.
2012-
// i.e class C extends foo()./*do language service operation here*/B {}
2013-
return isEntityNameExpression(name.expression) ?
2014-
resolveEntityName(name.expression as EntityNameOrEntityNameExpression, meaning, ignoreErrors, dontResolveAlias, location) :
2015-
undefined;
2016-
}
20172007
else {
20182008
Debug.assertNever(name, "Unknown entity name kind.");
20192009
}
@@ -24203,8 +24193,8 @@ namespace ts {
2420324193
}
2420424194
}
2420524195

24206-
if (entityName.parent.kind === SyntaxKind.ExportAssignment && isEntityNameExpression(<Identifier | PropertyAccessExpression>entityName)) {
24207-
return resolveEntityName(<EntityNameExpression>entityName,
24196+
if (entityName.parent.kind === SyntaxKind.ExportAssignment && isEntityNameExpression(entityName)) {
24197+
return resolveEntityName(entityName,
2420824198
/*all meanings*/ SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias);
2420924199
}
2421024200

@@ -24219,7 +24209,7 @@ namespace ts {
2421924209
entityName = <QualifiedName | PropertyAccessEntityNameExpression>entityName.parent;
2422024210
}
2422124211

24222-
if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
24212+
if (isHeritageClauseElementIdentifier(entityName)) {
2422324213
let meaning = SymbolFlags.None;
2422424214
// In an interface or class, we're definitely interested in a type.
2422524215
if (entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments) {
@@ -24235,7 +24225,7 @@ namespace ts {
2423524225
}
2423624226

2423724227
meaning |= SymbolFlags.Alias;
24238-
const entityNameSymbol = resolveEntityName(<EntityName>entityName, meaning);
24228+
const entityNameSymbol = isEntityNameExpression(entityName) ? resolveEntityName(entityName, meaning) : undefined;
2423924229
if (entityNameSymbol) {
2424024230
return entityNameSymbol;
2424124231
}

src/compiler/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1622,7 +1622,7 @@ namespace ts {
16221622
multiLine?: boolean;
16231623
}
16241624

1625-
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
1625+
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
16261626
export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
16271627

16281628
export interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {

src/compiler/utilities.ts

Lines changed: 1 addition & 1 deletion
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
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ declare namespace ts {
969969
interface ObjectLiteralExpression extends ObjectLiteralExpressionBase<ObjectLiteralElementLike> {
970970
kind: SyntaxKind.ObjectLiteralExpression;
971971
}
972-
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
972+
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
973973
type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
974974
interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {
975975
kind: SyntaxKind.PropertyAccessExpression;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ declare namespace ts {
969969
interface ObjectLiteralExpression extends ObjectLiteralExpressionBase<ObjectLiteralElementLike> {
970970
kind: SyntaxKind.ObjectLiteralExpression;
971971
}
972-
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
972+
type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
973973
type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
974974
interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {
975975
kind: SyntaxKind.PropertyAccessExpression;

0 commit comments

Comments
 (0)