Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b536f9d

Browse filesBrowse files
committed
Should not remove the reused resolutions in the file when file contents have not changed.
1 parent aea8630 commit b536f9d
Copy full SHA for b536f9d

7 files changed

+18-15Lines changed: 18 additions & 15 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/program.ts‎

Copy file name to clipboardExpand all lines: src/compiler/program.ts
+5-3Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -595,11 +595,11 @@ namespace ts {
595595
let _compilerOptionsObjectLiteralSyntax: ObjectLiteralExpression;
596596

597597
let moduleResolutionCache: ModuleResolutionCache;
598-
let resolveModuleNamesWorker: (moduleNames: string[], containingFile: string) => ResolvedModuleFull[];
598+
let resolveModuleNamesWorker: (moduleNames: string[], containingFile: string, reusedNames?: string[]) => ResolvedModuleFull[];
599599
const hasInvalidatedResolution = host.hasInvalidatedResolution || returnFalse;
600600
const hasChangedAutomaticTypeDirectiveNames = host.hasChangedAutomaticTypeDirectiveNames && host.hasChangedAutomaticTypeDirectiveNames.bind(host) || returnFalse;
601601
if (host.resolveModuleNames) {
602-
resolveModuleNamesWorker = (moduleNames, containingFile) => host.resolveModuleNames(checkAllDefined(moduleNames), containingFile).map(resolved => {
602+
resolveModuleNamesWorker = (moduleNames, containingFile, reusedNames) => host.resolveModuleNames(checkAllDefined(moduleNames), containingFile, reusedNames).map(resolved => {
603603
// An older host may have omitted extension, in which case we should infer it from the file extension of resolvedFileName.
604604
if (!resolved || (resolved as ResolvedModuleFull).extension !== undefined) {
605605
return resolved as ResolvedModuleFull;
@@ -820,6 +820,7 @@ namespace ts {
820820
* * ResolvedModuleFull instance: can be reused.
821821
*/
822822
let result: ResolvedModuleFull[];
823+
let reusedNames: string[];
823824
/** A transient placeholder used to mark predicted resolution in the result list. */
824825
const predictedToResolveToAmbientModuleMarker: ResolvedModuleFull = <any>{};
825826

@@ -835,6 +836,7 @@ namespace ts {
835836
trace(host, Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, containingFile);
836837
}
837838
(result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
839+
(reusedNames || (reusedNames = [])).push(moduleName);
838840
continue;
839841
}
840842
}
@@ -863,7 +865,7 @@ namespace ts {
863865
}
864866

865867
const resolutions = unknownModuleNames && unknownModuleNames.length
866-
? resolveModuleNamesWorker(unknownModuleNames, containingFile)
868+
? resolveModuleNamesWorker(unknownModuleNames, containingFile, reusedNames)
867869
: emptyArray;
868870

869871
// Combine results of resolutions and predicted results
Collapse file

‎src/compiler/resolutionCache.ts‎

Copy file name to clipboardExpand all lines: src/compiler/resolutionCache.ts
+6-5Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace ts {
88
startRecordingFilesWithChangedResolutions(): void;
99
finishRecordingFilesWithChangedResolutions(): Path[];
1010

11-
resolveModuleNames(moduleNames: string[], containingFile: string, logChanges: boolean): ResolvedModuleFull[];
11+
resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, logChanges: boolean): ResolvedModuleFull[];
1212
resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
1313

1414
invalidateResolutionOfFile(filePath: Path): void;
@@ -207,6 +207,7 @@ namespace ts {
207207
perDirectoryCache: Map<Map<T>>,
208208
loader: (name: string, containingFile: string, options: CompilerOptions, host: ModuleResolutionHost) => T,
209209
getResolutionWithResolvedFileName: GetResolutionWithResolvedFileName<T, R>,
210+
reusedNames: string[] | undefined,
210211
logChanges: boolean): R[] {
211212

212213
const path = resolutionHost.toPath(containingFile);
@@ -253,7 +254,7 @@ namespace ts {
253254

254255
// Stop watching and remove the unused name
255256
resolutionsInFile.forEach((resolution, name) => {
256-
if (!seenNamesInFile.has(name)) {
257+
if (!seenNamesInFile.has(name) && !contains(reusedNames, name)) {
257258
stopWatchFailedLookupLocationOfResolution(resolution);
258259
resolutionsInFile.delete(name);
259260
}
@@ -285,16 +286,16 @@ namespace ts {
285286
typeDirectiveNames, containingFile,
286287
resolvedTypeReferenceDirectives, perDirectoryResolvedTypeReferenceDirectives,
287288
resolveTypeReferenceDirective, getResolvedTypeReferenceDirective,
288-
/*logChanges*/ false
289+
/*reusedNames*/ undefined, /*logChanges*/ false
289290
);
290291
}
291292

292-
function resolveModuleNames(moduleNames: string[], containingFile: string, logChanges: boolean): ResolvedModuleFull[] {
293+
function resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined, logChanges: boolean): ResolvedModuleFull[] {
293294
return resolveNamesWithLocalCache(
294295
moduleNames, containingFile,
295296
resolvedModuleNames, perDirectoryResolvedModuleNames,
296297
resolveModuleName, getResolvedModule,
297-
logChanges
298+
reusedNames, logChanges
298299
);
299300
}
300301

Collapse file

‎src/compiler/types.ts‎

Copy file name to clipboardExpand all lines: src/compiler/types.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4138,7 +4138,7 @@ namespace ts {
41384138
* If resolveModuleNames is implemented then implementation for members from ModuleResolutionHost can be just
41394139
* 'throw new Error("NotImplemented")'
41404140
*/
4141-
resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[];
4141+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[];
41424142
/**
41434143
* This method is a companion for 'resolveModuleNames' and is used to resolve 'types' references to actual type declaration files
41444144
*/
Collapse file

‎src/compiler/watchedProgram.ts‎

Copy file name to clipboardExpand all lines: src/compiler/watchedProgram.ts
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,8 +396,8 @@ namespace ts {
396396
return partialSystem.getDirectories(path);
397397
}
398398

399-
function resolveModuleNames(moduleNames: string[], containingFile: string) {
400-
return resolutionCache.resolveModuleNames(moduleNames, containingFile, /*logChanges*/ false);
399+
function resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames?: string[]) {
400+
return resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, /*logChanges*/ false);
401401
}
402402

403403
function resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string) {
Collapse file

‎src/server/project.ts‎

Copy file name to clipboardExpand all lines: src/server/project.ts
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ namespace ts.server {
325325
return !this.isWatchedMissingFile(path) && this.partialSystem.fileExists(file);
326326
}
327327

328-
resolveModuleNames(moduleNames: string[], containingFile: string): ResolvedModuleFull[] {
329-
return this.resolutionCache.resolveModuleNames(moduleNames, containingFile, /*logChanges*/ true);
328+
resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModuleFull[] {
329+
return this.resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, /*logChanges*/ true);
330330
}
331331

332332
resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[] {
Collapse file

‎src/services/services.ts‎

Copy file name to clipboardExpand all lines: src/services/services.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ namespace ts {
11771177
}
11781178

11791179
if (host.resolveModuleNames) {
1180-
compilerHost.resolveModuleNames = (moduleNames, containingFile) => host.resolveModuleNames(moduleNames, containingFile);
1180+
compilerHost.resolveModuleNames = (moduleNames, containingFile, reusedNames) => host.resolveModuleNames(moduleNames, containingFile, reusedNames);
11811181
}
11821182
if (host.resolveTypeReferenceDirectives) {
11831183
compilerHost.resolveTypeReferenceDirectives = (typeReferenceDirectiveNames, containingFile) => {
Collapse file

‎src/services/types.ts‎

Copy file name to clipboardExpand all lines: src/services/types.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ namespace ts {
183183
* if implementation is omitted then language service will use built-in module resolution logic and get answers to
184184
* host specific questions using 'getScriptSnapshot'.
185185
*/
186-
resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[];
186+
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[];
187187
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
188188
hasInvalidatedResolution?: HasInvalidatedResolution;
189189
hasChangedAutomaticTypeDirectiveNames?(): boolean;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.