Skip to content

Commit cda008f

Browse files
committed
Resolutions in cache stays for lifetime..
1 parent 90cb7b8 commit cda008f

53 files changed

Lines changed: 961 additions & 998 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/compiler/moduleNameResolver.ts

Lines changed: 204 additions & 42 deletions
Large diffs are not rendered by default.

src/compiler/program.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ import {
276276
removeSuffix,
277277
resolutionExtensionIsTSOrJson,
278278
ResolutionMode,
279-
ResolutionWithFailedLookupLocations,
280279
resolveConfigFileProjectName,
281280
ResolvedConfigFileName,
282281
ResolvedModuleFull,
@@ -2038,6 +2037,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
20382037
getResolvedProjectReferenceByPath,
20392038
forEachResolvedProjectReference,
20402039
isSourceOfProjectReferenceRedirect,
2040+
getRedirectReferenceForResolution,
20412041
getRedirectReferenceForResolutionFromSourceOfProject,
20422042
getCompilerOptionsForFile,
20432043
getDefaultResolutionModeForFile,
@@ -4230,7 +4230,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
42304230
resolveModuleNamesReusingOldState(moduleNames, file);
42314231
Debug.assert(resolutions.length === moduleNames.length);
42324232
const optionsForFile = getCompilerOptionsForFile(file);
4233-
const resolutionsInFile = createModeAwareCache<ResolutionWithFailedLookupLocations>();
4233+
const resolutionsInFile = createModeAwareCache<ResolvedModuleWithFailedLookupLocations>();
42344234
(resolvedModules ??= new Map()).set(file.path, resolutionsInFile);
42354235
for (let index = 0; index < moduleNames.length; index++) {
42364236
const resolution = resolutions[index].resolvedModule;

src/compiler/resolutionCache.ts

Lines changed: 238 additions & 104 deletions
Large diffs are not rendered by default.

src/compiler/types.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4905,6 +4905,7 @@ export interface Program extends ScriptReferenceHost {
49054905
getResolvedProjectReferenceToRedirect(fileName: string): ResolvedProjectReference | undefined;
49064906
/** @internal */ forEachResolvedProjectReference<T>(cb: (resolvedProjectReference: ResolvedProjectReference) => T | undefined): T | undefined;
49074907
/** @internal */ getResolvedProjectReferenceByPath(projectReferencePath: Path): ResolvedProjectReference | undefined;
4908+
/** @internal */ getRedirectReferenceForResolution(file: SourceFile): ResolvedProjectReference | undefined;
49084909
/** @internal */ getRedirectReferenceForResolutionFromSourceOfProject(filePath: Path): ResolvedProjectReference | undefined;
49094910
/** @internal */ isSourceOfProjectReferenceRedirect(fileName: string): boolean;
49104911
/** @internal */ getCompilerOptionsForFile(file: SourceFile): CompilerOptions;
@@ -7986,6 +7987,12 @@ export const enum Extension {
79867987
Dcts = ".d.cts",
79877988
}
79887989

7990+
/** @internal */
7991+
export interface GlobalCacheResolutionResult {
7992+
resolution: ResolvedModuleWithFailedLookupLocations;
7993+
primary: ResolvedModuleWithFailedLookupLocations["resolvedModule"];
7994+
}
7995+
79897996
export interface ResolvedModuleWithFailedLookupLocations {
79907997
readonly resolvedModule: ResolvedModuleFull | undefined;
79917998
/** @internal */
@@ -8001,7 +8008,7 @@ export interface ResolvedModuleWithFailedLookupLocations {
80018008
*/
80028009
alternateResult?: string;
80038010
/** @internal */
8004-
globalCacheResolution?: ResolvedModuleWithFailedLookupLocations | false;
8011+
globalCacheResolution?: GlobalCacheResolutionResult | false;
80058012
}
80068013

80078014
export interface ResolvedTypeReferenceDirective {

src/compiler/watchPublic.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ export function createWatchProgram<T extends BuilderProgram>(host: WatchCompiler
542542
host.resolveLibrary.bind(host);
543543
compilerHost.getModuleResolutionCache = host.resolveModuleNameLiterals || host.resolveModuleNames ?
544544
maybeBind(host, host.getModuleResolutionCache) :
545-
(() => resolutionCache.getModuleResolutionCache());
545+
(() => resolutionCache.moduleResolutionCache);
546546
const userProvidedResolution = !!host.resolveModuleNameLiterals || !!host.resolveTypeReferenceDirectiveReferences ||
547547
!!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives;
548548
// All resolutions are invalid if user provided resolutions and didnt supply hasInvalidatedResolutions

src/harness/incrementalUtils.ts

Lines changed: 327 additions & 26 deletions
Large diffs are not rendered by default.

src/server/project.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
842842

843843
/** @internal */
844844
getModuleResolutionCache(): ModuleResolutionCache | undefined {
845-
return this.resolutionCache.getModuleResolutionCache();
845+
return this.resolutionCache.moduleResolutionCache;
846846
}
847847

848848
/** @internal */

src/testRunner/unittests/helpers/tscWatch.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ function verifyProgramStructureAndResolutionCache(
245245
}),
246246
program,
247247
caption,
248+
userResolvedModuleNames,
248249
);
249250
verifyResolutionCache(
250251
resolutionCache,

tests/baselines/reference/tscWatch/moduleResolution/late-discovered-dependency-symlink.js

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -225,20 +225,7 @@ Output::
225225
226226
Reusing resolution of module 'package-b' from '/home/src/workspace/packageC/index.ts' of old program, it was successfully resolved to '/home/src/workspace/packageB/index.d.ts'.
227227
======== Resolving module 'package-b' from '/home/src/workspace/packageC/package.json'. ========
228-
Module resolution kind is not specified, using 'Node10'.
229-
Loading module 'package-b' from 'node_modules' folder, target file types: TypeScript, Declaration.
230-
Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
231-
File '/home/src/workspace/packageC/node_modules/package-b/package.json' exists according to earlier cached lookups.
232-
File '/home/src/workspace/packageC/node_modules/package-b.ts' does not exist.
233-
File '/home/src/workspace/packageC/node_modules/package-b.tsx' does not exist.
234-
File '/home/src/workspace/packageC/node_modules/package-b.d.ts' does not exist.
235-
'package.json' does not have a 'typings' field.
236-
'package.json' does not have a 'types' field.
237-
'package.json' does not have a 'main' field.
238-
File '/home/src/workspace/packageC/node_modules/package-b/index.ts' does not exist.
239-
File '/home/src/workspace/packageC/node_modules/package-b/index.tsx' does not exist.
240-
File '/home/src/workspace/packageC/node_modules/package-b/index.d.ts' exists - use it as a name resolution result.
241-
Resolving real path for '/home/src/workspace/packageC/node_modules/package-b/index.d.ts', result '/home/src/workspace/packageB/index.d.ts'.
228+
Resolution for module 'package-b' was found in cache from location '/home/src/workspace/packageC'.
242229
======== Module name 'package-b' was successfully resolved to '/home/src/workspace/packageB/index.d.ts'. ========
243230
======== Resolving module 'package-a' from '/home/src/workspace/packageC/package.json'. ========
244231
Module resolution kind is not specified, using 'Node10'.

tests/baselines/reference/tscWatch/moduleResolution/module-resolutions-from-file-are-partially-used.js

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -291,26 +291,7 @@ File '/user/username/package.json' does not exist according to earlier cached lo
291291
File '/user/package.json' does not exist according to earlier cached lookups.
292292
File '/package.json' does not exist according to earlier cached lookups.
293293
======== Resolving module 'pkg' from '/user/username/projects/myproject/a.ts'. ========
294-
Explicitly specified module resolution kind: 'Node16'.
295-
Resolving in ESM mode with conditions 'import', 'types', 'node'.
296-
File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
297-
File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
298-
File '/user/username/package.json' does not exist according to earlier cached lookups.
299-
File '/user/package.json' does not exist according to earlier cached lookups.
300-
File '/package.json' does not exist according to earlier cached lookups.
301-
Loading module 'pkg' from 'node_modules' folder, target file types: TypeScript, JavaScript, Declaration.
302-
Searching all ancestor node_modules directories for preferred extensions: TypeScript, Declaration.
303-
File '/user/username/projects/myproject/node_modules/pkg/package.json' exists according to earlier cached lookups.
304-
Entering conditional exports.
305-
Matched 'exports' condition 'import'.
306-
Using 'exports' subpath '.' with target './import.js'.
307-
File name '/user/username/projects/myproject/node_modules/pkg/import.js' has a '.js' extension - stripping it.
308-
File '/user/username/projects/myproject/node_modules/pkg/import.ts' does not exist.
309-
File '/user/username/projects/myproject/node_modules/pkg/import.tsx' does not exist.
310-
File '/user/username/projects/myproject/node_modules/pkg/import.d.ts' exists - use it as a name resolution result.
311-
Resolved under condition 'import'.
312-
Exiting conditional exports.
313-
Resolving real path for '/user/username/projects/myproject/node_modules/pkg/import.d.ts', result '/user/username/projects/myproject/node_modules/pkg/import.d.ts'.
294+
Resolution for module 'pkg' was found in cache from location '/user/username/projects/myproject'.
314295
======== Module name 'pkg' was successfully resolved to '/user/username/projects/myproject/node_modules/pkg/import.d.ts' with Package ID 'pkg/import.d.ts@0.0.1'. ========
315296
File '/user/username/projects/myproject/node_modules/pkg/package.json' exists according to earlier cached lookups.
316297
File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.

0 commit comments

Comments
 (0)