Skip to content

Commit 55621aa

Browse files
committed
Get exported symbols off aliases in getCompletions
1 parent 284c767 commit 55621aa

File tree

5 files changed

+96
-1
lines changed

5 files changed

+96
-1
lines changed

src/compiler/checker.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ module ts {
9393
getFullyQualifiedName: getFullyQualifiedName,
9494
getResolvedSignature: getResolvedSignature,
9595
getEnumMemberValue: getEnumMemberValue,
96-
isValidPropertyAccess: isValidPropertyAccess
96+
isValidPropertyAccess: isValidPropertyAccess,
97+
getAliasedSymbol: resolveImport
9798
};
9899

99100
var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined");

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,7 @@ module ts {
657657
getEnumMemberValue(node: EnumMember): number;
658658

659659
isValidPropertyAccess(node: PropertyAccess, propertyName: string): boolean;
660+
getAliasedSymbol(symbol: Symbol): Symbol;
660661
}
661662

662663
export interface TextWriter {

src/services/services.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,6 +2147,12 @@ module ts {
21472147

21482148
if (mappedNode.kind === SyntaxKind.Identifier || mappedNode.kind === SyntaxKind.QualifiedName || mappedNode.kind === SyntaxKind.PropertyAccess) {
21492149
var symbol = typeInfoResolver.getSymbolInfo(mappedNode);
2150+
2151+
// This is an alias, follow what it aliases
2152+
while (symbol && symbol.flags & SymbolFlags.Import) {
2153+
symbol = typeInfoResolver.getAliasedSymbol(symbol);
2154+
}
2155+
21502156
if (symbol && symbol.flags & SymbolFlags.HasExports) {
21512157
// Extract module or enum members
21522158
forEachValue(symbol.exports, symbol => {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
////module M {
4+
//// export interface I { }
5+
//// export class C {
6+
//// static property;
7+
//// }
8+
//// export enum E {
9+
//// value = 0
10+
//// }
11+
//// export module N {
12+
//// export var v;
13+
//// }
14+
//// export var V = 0;
15+
//// export function F() { }
16+
//// export import A = M;
17+
////}
18+
////
19+
////import m = M;
20+
////import c = M.C;
21+
////import e = M.E;
22+
////import n = M.N;
23+
////import v = M.V;
24+
////import f = M.F;
25+
////import a = M.A;
26+
////
27+
////m./*1*/;
28+
////c./*2*/;
29+
////e./*3*/;
30+
////n./*4*/;
31+
////v./*5*/;
32+
////f./*6*/;
33+
////a./*7*/;
34+
35+
36+
// Module m
37+
goTo.marker("1");
38+
verify.memberListContains("I");
39+
verify.memberListContains("C");
40+
verify.memberListContains("E");
41+
verify.memberListContains("N");
42+
verify.memberListContains("V");
43+
verify.memberListContains("F");
44+
verify.memberListContains("A");
45+
46+
// Class C
47+
goTo.marker("2");
48+
verify.memberListContains("property");
49+
50+
// Enum E
51+
goTo.marker("3");
52+
verify.memberListContains("value");
53+
54+
// Module N
55+
goTo.marker("4");
56+
verify.memberListContains("v");
57+
58+
// var V
59+
goTo.marker("5");
60+
verify.memberListContains("toFixed");
61+
62+
// function F
63+
goTo.marker("6");
64+
verify.memberListContains("call");
65+
66+
// alias a
67+
goTo.marker("7");
68+
verify.memberListContains("I");
69+
verify.memberListContains("C");
70+
verify.memberListContains("E");
71+
verify.memberListContains("N");
72+
verify.memberListContains("V");
73+
verify.memberListContains("F");
74+
verify.memberListContains("A");
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
////declare module 'foobar' {
4+
//// interface Q { x: number; }
5+
////}
6+
////declare module 'thing' {
7+
//// import x = require('foobar');
8+
//// var m: x./*1*/;
9+
////}
10+
11+
// Q does not show up in member list of x
12+
goTo.marker("1");
13+
verify.memberListContains("Q");

0 commit comments

Comments
 (0)