File tree Expand file tree Collapse file tree 4 files changed +35
-5
lines changed Expand file tree Collapse file tree 4 files changed +35
-5
lines changed Original file line number Diff line number Diff line change @@ -90,10 +90,12 @@ module ts {
90
90
let lastContainer : Node ;
91
91
let symbolCount = 0 ;
92
92
let Symbol = objectAllocator . getSymbolConstructor ( ) ;
93
+ let typeNames : Map < string > = { } ;
93
94
94
95
if ( ! file . locals ) {
95
96
bind ( file ) ;
96
97
file . symbolCount = symbolCount ;
98
+ file . typeNames = typeNames ;
97
99
}
98
100
99
101
return ;
@@ -194,6 +196,11 @@ module ts {
194
196
symbol = hasProperty ( symbolTable , name )
195
197
? symbolTable [ name ]
196
198
: ( symbolTable [ name ] = createSymbol ( SymbolFlags . None , name ) ) ;
199
+
200
+ if ( name && ( includes & ( SymbolFlags . Class | SymbolFlags . Enum | SymbolFlags . TypeAlias | SymbolFlags . Interface | SymbolFlags . TypeParameter | SymbolFlags . Module ) ) ) {
201
+ typeNames [ name ] = name ;
202
+ }
203
+
197
204
if ( symbol . flags & excludes ) {
198
205
if ( node . name ) {
199
206
node . name . parent = node ;
Original file line number Diff line number Diff line change @@ -148,6 +148,7 @@ module ts {
148
148
let commonSourceDirectory : string ;
149
149
let diagnosticsProducingTypeChecker : TypeChecker ;
150
150
let noDiagnosticsTypeChecker : TypeChecker ;
151
+ let typeNames : Map < string > ;
151
152
152
153
let start = new Date ( ) . getTime ( ) ;
153
154
@@ -172,6 +173,7 @@ module ts {
172
173
getDeclarationDiagnostics,
173
174
getCompilerOptionsDiagnostics,
174
175
getTypeChecker,
176
+ getTypeNames,
175
177
getDiagnosticsProducingTypeChecker,
176
178
getCommonSourceDirectory : ( ) => commonSourceDirectory ,
177
179
emit,
@@ -183,6 +185,20 @@ module ts {
183
185
} ;
184
186
return program ;
185
187
188
+ function getTypeNames ( ) {
189
+ if ( ! typeNames ) {
190
+ // Initialize a checker so that all our files are bound.
191
+ getTypeChecker ( ) ;
192
+ typeNames = { } ;
193
+
194
+ for ( let sourceFile of files ) {
195
+ copyMap ( sourceFile . typeNames , typeNames ) ;
196
+ }
197
+ }
198
+
199
+ return typeNames ;
200
+ }
201
+
186
202
function getEmitHost ( writeFileCallback ?: WriteFileCallback ) : EmitHost {
187
203
return {
188
204
getCanonicalFileName : fileName => host . getCanonicalFileName ( fileName ) ,
Original file line number Diff line number Diff line change @@ -422,6 +422,7 @@ module ts {
422
422
/* @internal */ locals ?: SymbolTable ; // Locals associated with node (initialized by binding)
423
423
/* @internal */ nextContainer ?: Node ; // Next container in declaration order (initialized by binding)
424
424
/* @internal */ localSymbol ?: Symbol ; // Local symbol declared by node (initialized by binding only for exported nodes)
425
+ /* @internal */ typeNames ?: Map < string > ;
425
426
}
426
427
427
428
export interface NodeArray < T > extends Array < T > , TextRange {
@@ -1223,6 +1224,8 @@ module ts {
1223
1224
// language service).
1224
1225
/* @internal */ getDiagnosticsProducingTypeChecker ( ) : TypeChecker ;
1225
1226
1227
+ /* @internal */ getTypeNames ( ) : Map < string > ;
1228
+
1226
1229
/* @internal */ getNodeCount ( ) : number ;
1227
1230
/* @internal */ getIdentifierCount ( ) : number ;
1228
1231
/* @internal */ getSymbolCount ( ) : number ;
Original file line number Diff line number Diff line change @@ -5992,6 +5992,7 @@ module ts {
5992
5992
let typeChecker = program . getTypeChecker ( ) ;
5993
5993
5994
5994
let result : number [ ] = [ ] ;
5995
+ let typeNames = program . getTypeNames ( ) ;
5995
5996
processNode ( sourceFile ) ;
5996
5997
5997
5998
return { spans : result , endOfLineState : EndOfLineState . None } ;
@@ -6048,11 +6049,14 @@ module ts {
6048
6049
// Only walk into nodes that intersect the requested span.
6049
6050
if ( node && textSpanIntersectsWith ( span , node . getFullStart ( ) , node . getFullWidth ( ) ) ) {
6050
6051
if ( node . kind === SyntaxKind . Identifier && ! nodeIsMissing ( node ) ) {
6051
- let symbol = typeChecker . getSymbolAtLocation ( node ) ;
6052
- if ( symbol ) {
6053
- let type = classifySymbol ( symbol , getMeaningFromLocation ( node ) ) ;
6054
- if ( type ) {
6055
- pushClassification ( node . getStart ( ) , node . getWidth ( ) , type ) ;
6052
+ let identifier = < Identifier > node ;
6053
+ if ( typeNames [ identifier . text ] ) {
6054
+ let symbol = typeChecker . getSymbolAtLocation ( node ) ;
6055
+ if ( symbol ) {
6056
+ let type = classifySymbol ( symbol , getMeaningFromLocation ( node ) ) ;
6057
+ if ( type ) {
6058
+ pushClassification ( node . getStart ( ) , node . getWidth ( ) , type ) ;
6059
+ }
6056
6060
}
6057
6061
}
6058
6062
}
You can’t perform that action at this time.
0 commit comments