Merge pull request #5043 from Microsoft/findRefsOnVarInExtends
Correctly recognize value symbol presence of expressions in extends clauses
This commit is contained in:
commit
acef223f95
|
@ -14224,7 +14224,21 @@ namespace ts {
|
|||
}
|
||||
|
||||
if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
|
||||
let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? SymbolFlags.Type : SymbolFlags.Namespace;
|
||||
let meaning = SymbolFlags.None;
|
||||
|
||||
// In an interface or class, we're definitely interested in a type.
|
||||
if (entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments) {
|
||||
meaning = SymbolFlags.Type;
|
||||
|
||||
// In a class 'extends' clause we are also looking for a value.
|
||||
if (isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) {
|
||||
meaning |= SymbolFlags.Value;
|
||||
}
|
||||
}
|
||||
else {
|
||||
meaning = SymbolFlags.Namespace;
|
||||
}
|
||||
|
||||
meaning |= SymbolFlags.Alias;
|
||||
return resolveEntityName(<EntityName>entityName, meaning);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ var x = foo1;
|
|||
|
||||
class y extends x {}
|
||||
>y : Symbol(y, Decl(foo2.ts, 1, 13))
|
||||
>x : Symbol(x, Decl(foo2.ts, 1, 3))
|
||||
|
||||
=== tests/cases/conformance/classes/classExpressions/foo1.ts ===
|
||||
class x{}
|
||||
|
|
|
@ -9,4 +9,5 @@ var x = A;
|
|||
|
||||
class C extends x { } // error, could not find symbol xs
|
||||
>C : Symbol(C, Decl(extendNonClassSymbol1.ts, 1, 10))
|
||||
>x : Symbol(x, Decl(extendNonClassSymbol1.ts, 1, 3))
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
/// <reference path="fourslash.ts"/>
|
||||
|
||||
|
||||
////var [|Base|] = class { };
|
||||
////class C extends [|Base|] { }
|
||||
|
||||
let ranges = test.ranges();
|
||||
for (let range of ranges) {
|
||||
goTo.position(range.start);
|
||||
|
||||
verify.referencesCountIs(ranges.length);
|
||||
for (let expectedReference of ranges) {
|
||||
verify.referencesAtPositionContains(expectedReference);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
/// <reference path="fourslash.ts"/>
|
||||
|
||||
////interface [|Base|] { }
|
||||
////namespace n {
|
||||
//// var Base = class { };
|
||||
//// interface I extends [|Base|] { }
|
||||
////}
|
||||
|
||||
let ranges = test.ranges();
|
||||
for (let range of ranges) {
|
||||
goTo.position(range.start);
|
||||
|
||||
verify.referencesCountIs(ranges.length);
|
||||
for (let expectedReference of ranges) {
|
||||
verify.referencesAtPositionContains(expectedReference);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
/// <reference path="fourslash.ts"/>
|
||||
|
||||
|
||||
////var Base = class { };
|
||||
////class C extends Base implements [|Base|] { }
|
||||
|
||||
let ranges = test.ranges();
|
||||
for (let range of ranges) {
|
||||
verify.referencesCountIs(0);
|
||||
}
|
Loading…
Reference in a new issue