@@ -412,7 +412,7 @@ namespace ts.server {
412
412
) : void {
413
413
const projectService = defaultProject . projectService ;
414
414
let toDo : ProjectAndLocation < TLocation > [ ] | undefined ;
415
- const seenProjects = createMap < true > ( ) ;
415
+ const seenProjects = createMap < Project > ( ) ;
416
416
forEachProjectInProjects ( projects , initialLocation && initialLocation . fileName , ( project , path ) => {
417
417
// TLocation shoud be either `sourcemaps.SourceMappableLocation` or `undefined`. Since `initialLocation` is `TLocation` this cast should be valid.
418
418
const location = ( initialLocation ? { fileName : path , position : initialLocation . position } : undefined ) as TLocation ;
@@ -421,9 +421,11 @@ namespace ts.server {
421
421
422
422
// After initial references are collected, go over every other project and see if it has a reference for the symbol definition.
423
423
if ( getDefinition ) {
424
+ projectService . loadAncestorAndReferenceConfiguredProjects ( seenProjects ) ;
425
+
424
426
const memGetDefinition = memoize ( getDefinition ) ;
425
427
projectService . forEachEnabledProject ( project => {
426
- if ( ! addToSeen ( seenProjects , project . projectName ) ) return ;
428
+ if ( ! addToSeen ( seenProjects , project ) ) return ;
427
429
const definition = getDefinitionInProject ( memGetDefinition ( ) , defaultProject , project ) ;
428
430
if ( definition ) {
429
431
toDo = callbackProjectAndLocation < TLocation > ( { project, location : definition as TLocation } , projectService , toDo , seenProjects , cb ) ;
@@ -442,16 +444,24 @@ namespace ts.server {
442
444
return mappedDefinition && project . containsFile ( toNormalizedPath ( mappedDefinition . fileName ) ) ? mappedDefinition : undefined ;
443
445
}
444
446
447
+ function addToSeen ( seenProjects : Map < Project > , project : Project ) {
448
+ return ts . addToSeen ( seenProjects , getProjectKey ( project ) , project ) ;
449
+ }
450
+
451
+ function getProjectKey ( project : Project ) {
452
+ return project . projectKind === ProjectKind . Configured ? ( project as ConfiguredProject ) . canonicalConfigFilePath : project . projectName ;
453
+ }
454
+
445
455
function callbackProjectAndLocation < TLocation extends sourcemaps . SourceMappableLocation | undefined > (
446
456
projectAndLocation : ProjectAndLocation < TLocation > ,
447
457
projectService : ProjectService ,
448
458
toDo : ProjectAndLocation < TLocation > [ ] | undefined ,
449
- seenProjects : Map < true > ,
459
+ seenProjects : Map < Project > ,
450
460
cb : CombineProjectOutputCallback < TLocation > ,
451
461
) : ProjectAndLocation < TLocation > [ ] | undefined {
452
462
if ( projectAndLocation . project . getCancellationToken ( ) . isCancellationRequested ( ) ) return undefined ; // Skip rest of toDo if cancelled
453
463
cb ( projectAndLocation , ( project , location ) => {
454
- seenProjects . set ( projectAndLocation . project . projectName , true ) ;
464
+ seenProjects . set ( getProjectKey ( projectAndLocation . project ) , projectAndLocation . project ) ;
455
465
const originalLocation = projectService . getOriginalLocationEnsuringConfiguredProject ( project , location ) ;
456
466
if ( ! originalLocation ) return undefined ;
457
467
@@ -472,8 +482,8 @@ namespace ts.server {
472
482
return toDo ;
473
483
}
474
484
475
- function addToTodo < TLocation extends sourcemaps . SourceMappableLocation | undefined > ( projectAndLocation : ProjectAndLocation < TLocation > , toDo : Push < ProjectAndLocation < TLocation > > , seenProjects : Map < true > ) : void {
476
- if ( addToSeen ( seenProjects , projectAndLocation . project . projectName ) ) toDo . push ( projectAndLocation ) ;
485
+ function addToTodo < TLocation extends sourcemaps . SourceMappableLocation | undefined > ( projectAndLocation : ProjectAndLocation < TLocation > , toDo : Push < ProjectAndLocation < TLocation > > , seenProjects : Map < Project > ) : void {
486
+ if ( addToSeen ( seenProjects , projectAndLocation . project ) ) toDo . push ( projectAndLocation ) ;
477
487
}
478
488
479
489
function documentSpanLocation ( { fileName, textSpan } : DocumentSpan ) : sourcemaps . SourceMappableLocation {
0 commit comments