Skip to content

Commit d744bb1

Browse files
committed
Maintain libPath resolution in program
1 parent 4690f30 commit d744bb1

12 files changed

+19
-409
lines changed

Diff for: src/compiler/program.ts

+13-6
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
14691469
let automaticTypeDirectiveNames: string[] | undefined;
14701470
let automaticTypeDirectiveResolutions: ModeAwareCache<ResolvedTypeReferenceDirectiveWithFailedLookupLocations>;
14711471

1472+
let resolvedLibReferences: Map<string, string> | undefined;
1473+
14721474
// The below settings are to track if a .js file should be add to the program if loaded via searching under node_modules.
14731475
// This works as imported modules are discovered recursively in a depth first manner, specifically:
14741476
// - For each root file, findSourceFile is called.
@@ -1813,6 +1815,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
18131815
sourceFileToPackageName,
18141816
redirectTargetsMap,
18151817
usesUriStyleNodeCoreModules,
1818+
resolvedLibReferences,
18161819
isEmittedFile,
18171820
getConfigFileParsingDiagnostics,
18181821
getProjectReferences,
@@ -2481,6 +2484,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
24812484
sourceFileToPackageName = oldProgram.sourceFileToPackageName;
24822485
redirectTargetsMap = oldProgram.redirectTargetsMap;
24832486
usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules;
2487+
resolvedLibReferences = oldProgram.resolvedLibReferences;
24842488

24852489
return StructureIsReused.Completely;
24862490
}
@@ -2596,7 +2600,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
25962600
return equalityComparer(file.fileName, getDefaultLibraryFileName());
25972601
}
25982602
else {
2599-
return some(options.lib, libFileName => equalityComparer(file.fileName, pathForLibFile(libFileName)));
2603+
return some(options.lib, libFileName => equalityComparer(file.fileName, resolvedLibReferences!.get(libFileName)!));
26002604
}
26012605
}
26022606

@@ -3313,7 +3317,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
33133317
const libName = toFileNameLowerCase(ref.fileName);
33143318
const libFileName = libMap.get(libName);
33153319
if (libFileName) {
3316-
return getSourceFile(pathForLibFile(libFileName));
3320+
return getSourceFile(resolvedLibReferences?.get(libFileName)!);
33173321
}
33183322
}
33193323

@@ -3810,6 +3814,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
38103814
}
38113815

38123816
function pathForLibFile(libFileName: string): string {
3817+
const existing = resolvedLibReferences?.get(libFileName);
3818+
if (existing) return existing;
38133819
// Support resolving to lib.dom.d.ts -> @typescript/lib-dom, and
38143820
// lib.dom.iterable.d.ts -> @typescript/lib-dom/iterable
38153821
// lib.es2015.symbol.wellknown.d.ts -> @typescript/lib-es2015/symbol-wellknown
@@ -3822,10 +3828,11 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
38223828
}
38233829
const resolveFrom = combinePaths(currentDirectory, `__lib_node_modules_lookup_${libFileName}__.ts`);
38243830
const localOverrideModuleResult = resolveModuleName("@typescript/lib-" + path, resolveFrom, { moduleResolution: ModuleResolutionKind.Node10, traceResolution: options.traceResolution }, host, moduleResolutionCache);
3825-
if (localOverrideModuleResult?.resolvedModule) {
3826-
return localOverrideModuleResult.resolvedModule.resolvedFileName;
3827-
}
3828-
return combinePaths(defaultLibraryPath, libFileName);
3831+
const result = localOverrideModuleResult?.resolvedModule ?
3832+
localOverrideModuleResult.resolvedModule.resolvedFileName :
3833+
combinePaths(defaultLibraryPath, libFileName);
3834+
(resolvedLibReferences ??= new Map()).set(libFileName, result);
3835+
return result;
38293836
}
38303837

38313838
function processLibReferenceDirectives(file: SourceFile) {

Diff for: src/compiler/types.ts

+5
Original file line numberDiff line numberDiff line change
@@ -4825,6 +4825,11 @@ export interface Program extends ScriptReferenceHost {
48254825
* @internal
48264826
*/
48274827
readonly usesUriStyleNodeCoreModules: boolean;
4828+
/**
4829+
* Map from libFileName to actual resolved location of the lib
4830+
* @internal
4831+
*/
4832+
resolvedLibReferences: Map<string, string> | undefined;
48284833
/**
48294834
* Is the file emitted file
48304835
*

Diff for: tests/baselines/reference/jsdocInTypeScript.trace.json

+1-10
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,6 @@
9898
"Directory 'node_modules' does not exist, skipping all lookups in it.",
9999
"Directory '/node_modules' does not exist, skipping all lookups in it.",
100100
"======== Module name '@typescript/lib-es2015/generator' was not resolved. ========",
101-
"======== Resolving module '@typescript/lib-es2015/iterable' from '__lib_node_modules_lookup_lib.es2015.iterable.d.ts__.ts'. ========",
102-
"Resolution for module '@typescript/lib-es2015/iterable' was found in cache from location '/.src'.",
103-
"======== Module name '@typescript/lib-es2015/iterable' was not resolved. ========",
104101
"======== Resolving module '@typescript/lib-es2015/promise' from '__lib_node_modules_lookup_lib.es2015.promise.d.ts__.ts'. ========",
105102
"Explicitly specified module resolution kind: 'Node10'.",
106103
"Loading module '@typescript/lib-es2015/promise' from 'node_modules' folder, target file types: TypeScript, Declaration.",
@@ -134,9 +131,6 @@
134131
"Directory 'node_modules' does not exist, skipping all lookups in it.",
135132
"Directory '/node_modules' does not exist, skipping all lookups in it.",
136133
"======== Module name '@typescript/lib-es2015/reflect' was not resolved. ========",
137-
"======== Resolving module '@typescript/lib-es2015/symbol' from '__lib_node_modules_lookup_lib.es2015.symbol.d.ts__.ts'. ========",
138-
"Resolution for module '@typescript/lib-es2015/symbol' was found in cache from location '/.src'.",
139-
"======== Module name '@typescript/lib-es2015/symbol' was not resolved. ========",
140134
"======== Resolving module '@typescript/lib-es2015/symbol-wellknown' from '__lib_node_modules_lookup_lib.es2015.symbol.wellknown.d.ts__.ts'. ========",
141135
"Explicitly specified module resolution kind: 'Node10'.",
142136
"Loading module '@typescript/lib-es2015/symbol-wellknown' from 'node_modules' folder, target file types: TypeScript, Declaration.",
@@ -147,8 +141,5 @@
147141
"Loading module '@typescript/lib-es2015/symbol-wellknown' from 'node_modules' folder, target file types: JavaScript.",
148142
"Directory 'node_modules' does not exist, skipping all lookups in it.",
149143
"Directory '/node_modules' does not exist, skipping all lookups in it.",
150-
"======== Module name '@typescript/lib-es2015/symbol-wellknown' was not resolved. ========",
151-
"======== Resolving module '@typescript/lib-es2015/symbol' from '__lib_node_modules_lookup_lib.es2015.symbol.d.ts__.ts'. ========",
152-
"Resolution for module '@typescript/lib-es2015/symbol' was found in cache from location '/.src'.",
153-
"======== Module name '@typescript/lib-es2015/symbol' was not resolved. ========"
144+
"======== Module name '@typescript/lib-es2015/symbol-wellknown' was not resolved. ========"
154145
]

Diff for: tests/baselines/reference/moduleResolutionWithExtensions_withPaths.trace.json

-9
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,6 @@
131131
"Loading module '@typescript/lib-es2015/generator' from 'node_modules' folder, target file types: JavaScript.",
132132
"Directory 'node_modules' does not exist, skipping all lookups in it.",
133133
"======== Module name '@typescript/lib-es2015/generator' was not resolved. ========",
134-
"======== Resolving module '@typescript/lib-es2015/iterable' from '__lib_node_modules_lookup_lib.es2015.iterable.d.ts__.ts'. ========",
135-
"Resolution for module '@typescript/lib-es2015/iterable' was found in cache from location '/.src'.",
136-
"======== Module name '@typescript/lib-es2015/iterable' was not resolved. ========",
137134
"======== Resolving module '@typescript/lib-es2015/promise' from '__lib_node_modules_lookup_lib.es2015.promise.d.ts__.ts'. ========",
138135
"Explicitly specified module resolution kind: 'Node10'.",
139136
"Loading module '@typescript/lib-es2015/promise' from 'node_modules' folder, target file types: TypeScript, Declaration.",
@@ -164,9 +161,6 @@
164161
"Loading module '@typescript/lib-es2015/reflect' from 'node_modules' folder, target file types: JavaScript.",
165162
"Directory 'node_modules' does not exist, skipping all lookups in it.",
166163
"======== Module name '@typescript/lib-es2015/reflect' was not resolved. ========",
167-
"======== Resolving module '@typescript/lib-es2015/symbol' from '__lib_node_modules_lookup_lib.es2015.symbol.d.ts__.ts'. ========",
168-
"Resolution for module '@typescript/lib-es2015/symbol' was found in cache from location '/.src'.",
169-
"======== Module name '@typescript/lib-es2015/symbol' was not resolved. ========",
170164
"======== Resolving module '@typescript/lib-es2015/symbol-wellknown' from '__lib_node_modules_lookup_lib.es2015.symbol.wellknown.d.ts__.ts'. ========",
171165
"Explicitly specified module resolution kind: 'Node10'.",
172166
"Loading module '@typescript/lib-es2015/symbol-wellknown' from 'node_modules' folder, target file types: TypeScript, Declaration.",
@@ -177,9 +171,6 @@
177171
"Loading module '@typescript/lib-es2015/symbol-wellknown' from 'node_modules' folder, target file types: JavaScript.",
178172
"Directory 'node_modules' does not exist, skipping all lookups in it.",
179173
"======== Module name '@typescript/lib-es2015/symbol-wellknown' was not resolved. ========",
180-
"======== Resolving module '@typescript/lib-es2015/symbol' from '__lib_node_modules_lookup_lib.es2015.symbol.d.ts__.ts'. ========",
181-
"Resolution for module '@typescript/lib-es2015/symbol' was found in cache from location '/.src'.",
182-
"======== Module name '@typescript/lib-es2015/symbol' was not resolved. ========",
183174
"======== Resolving module '@typescript/lib-dom' from '__lib_node_modules_lookup_lib.dom.d.ts__.ts'. ========",
184175
"Explicitly specified module resolution kind: 'Node10'.",
185176
"Loading module '@typescript/lib-dom' from 'node_modules' folder, target file types: TypeScript, Declaration.",

0 commit comments

Comments
 (0)