Add traces for module resolution reuse (#44282)

This commit is contained in:
Sheetal Nandi 2021-05-27 11:14:12 -07:00 committed by GitHub
parent 5fde87135f
commit 6329a0df90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 154 additions and 28 deletions

View file

@ -4637,11 +4637,11 @@
"category": "Message",
"code": 6182
},
"Reusing resolution of module '{0}' to file '{1}' from old program.": {
"Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": {
"category": "Message",
"code": 6183
},
"Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program.": {
"Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": {
"category": "Message",
"code": 6184
},
@ -5073,6 +5073,46 @@
"category": "Message",
"code": 6388
},
"Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved.": {
"category": "Message",
"code": 6389
},
"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.": {
"category": "Message",
"code": 6390
},
"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.": {
"category": "Message",
"code": 6391
},
"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved.": {
"category": "Message",
"code": 6392
},
"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": {
"category": "Message",
"code": 6393
},
"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": {
"category": "Message",
"code": 6394
},
"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": {
"category": "Message",
"code": 6395
},
"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.": {
"category": "Message",
"code": 6396
},
"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.": {
"category": "Message",
"code": 6397
},
"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved.": {
"category": "Message",
"code": 6398
},
"The expected type comes from property '{0}' which is declared here on type '{1}'": {
"category": "Message",

View file

@ -1288,7 +1288,15 @@ namespace ts {
const oldResolvedModule = getResolvedModule(oldSourceFile, moduleName);
if (oldResolvedModule) {
if (isTraceEnabled(options, host)) {
trace(host, Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, getNormalizedAbsolutePath(file.originalFileName, currentDirectory));
trace(host,
oldResolvedModule.packageId ?
Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2,
moduleName,
getNormalizedAbsolutePath(file.originalFileName, currentDirectory),
oldResolvedModule.resolvedFileName,
oldResolvedModule.packageId && packageIdToString(oldResolvedModule.packageId)
);
}
(result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
(reusedNames || (reusedNames = [])).push(moduleName);

View file

@ -38,6 +38,7 @@ namespace ts {
interface ResolutionWithResolvedFileName {
resolvedFileName: string | undefined;
packagetId?: PackageId;
}
interface CachedResolvedModuleWithFailedLookupLocations extends ResolvedModuleWithFailedLookupLocations, ResolutionWithFailedLookupLocations {
@ -396,6 +397,29 @@ namespace ts {
const resolutionInDirectory = perDirectoryResolution.get(name);
if (resolutionInDirectory) {
resolution = resolutionInDirectory;
const host = resolutionHost.getCompilerHost?.() || resolutionHost;
if (isTraceEnabled(compilerOptions, host)) {
const resolved = getResolutionWithResolvedFileName(resolution);
trace(
host,
loader === resolveModuleName as unknown ?
resolved?.resolvedFileName ?
resolved.packagetId ?
Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:
Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:
Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved :
resolved?.resolvedFileName ?
resolved.packagetId ?
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4 :
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3 :
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved,
name,
containingFile,
getDirectoryPath(containingFile),
resolved?.resolvedFileName,
resolved?.packagetId && packageIdToString(resolved.packagetId)
);
}
}
else {
resolution = loader(name, containingFile, compilerOptions, resolutionHost.getCompilerHost?.() || resolutionHost, redirectedReference);
@ -413,6 +437,30 @@ namespace ts {
logChanges = false;
}
}
else {
const host = resolutionHost.getCompilerHost?.() || resolutionHost;
if (isTraceEnabled(compilerOptions, host) && !seenNamesInFile.has(name)) {
const resolved = getResolutionWithResolvedFileName(resolution);
trace(
host,
loader === resolveModuleName as unknown ?
resolved?.resolvedFileName ?
resolved.packagetId ?
Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved :
resolved?.resolvedFileName ?
resolved.packagetId ?
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 :
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 :
Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved,
name,
containingFile,
resolved?.resolvedFileName,
resolved?.packagetId && packageIdToString(resolved.packagetId)
);
}
}
Debug.assert(resolution !== undefined && !resolution.isInvalidated);
seenNamesInFile.set(name, true);
resolvedModules.push(getResolutionWithResolvedFileName(resolution));

View file

@ -677,8 +677,8 @@ namespace ts {
"File 'node_modules/@types/typerefs2/package.json' does not exist.",
"File 'node_modules/@types/typerefs2/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'typerefs2' was successfully resolved to 'node_modules/@types/typerefs2/index.d.ts', primary: true. ========",
"Reusing resolution of module './b2' to file 'f2.ts' from old program.",
"Reusing resolution of module './f1' to file 'f2.ts' from old program."
"Reusing resolution of module './b2' from 'f2.ts' of old program, it was successfully resolved to 'b2.ts'.",
"Reusing resolution of module './f1' from 'f2.ts' of old program, it was successfully resolved to 'f1.ts'."
], "program2: reuse module resolutions in f2 since it is unchanged");
}
@ -701,8 +701,8 @@ namespace ts {
"File 'node_modules/@types/typerefs2/package.json' does not exist.",
"File 'node_modules/@types/typerefs2/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'typerefs2' was successfully resolved to 'node_modules/@types/typerefs2/index.d.ts', primary: true. ========",
"Reusing resolution of module './b2' to file 'f2.ts' from old program.",
"Reusing resolution of module './f1' to file 'f2.ts' from old program."
"Reusing resolution of module './b2' from 'f2.ts' of old program, it was successfully resolved to 'b2.ts'.",
"Reusing resolution of module './f1' from 'f2.ts' of old program, it was successfully resolved to 'f1.ts'."
], "program3: reuse module resolutions in f2 since it is unchanged");
}
@ -726,8 +726,8 @@ namespace ts {
"File 'node_modules/@types/typerefs2/package.json' does not exist.",
"File 'node_modules/@types/typerefs2/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'typerefs2' was successfully resolved to 'node_modules/@types/typerefs2/index.d.ts', primary: true. ========",
"Reusing resolution of module './b2' to file 'f2.ts' from old program.",
"Reusing resolution of module './f1' to file 'f2.ts' from old program."
"Reusing resolution of module './b2' from 'f2.ts' of old program, it was successfully resolved to 'b2.ts'.",
"Reusing resolution of module './f1' from 'f2.ts' of old program, it was successfully resolved to 'f1.ts'.",
], "program_4: reuse module resolutions in f2 since it is unchanged");
}
@ -767,8 +767,8 @@ namespace ts {
"File 'node_modules/@types/typerefs2/package.json' does not exist.",
"File 'node_modules/@types/typerefs2/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'typerefs2' was successfully resolved to 'node_modules/@types/typerefs2/index.d.ts', primary: true. ========",
"Reusing resolution of module './b2' to file 'f2.ts' from old program.",
"Reusing resolution of module './f1' to file 'f2.ts' from old program."
"Reusing resolution of module './b2' from 'f2.ts' of old program, it was successfully resolved to 'b2.ts'.",
"Reusing resolution of module './f1' from 'f2.ts' of old program, it was successfully resolved to 'f1.ts'.",
], "program_6: reuse module resolutions in f2 since it is unchanged");
}
@ -787,8 +787,8 @@ namespace ts {
"File 'node_modules/@types/typerefs2/package.json' does not exist.",
"File 'node_modules/@types/typerefs2/index.d.ts' exist - use it as a name resolution result.",
"======== Type reference directive 'typerefs2' was successfully resolved to 'node_modules/@types/typerefs2/index.d.ts', primary: true. ========",
"Reusing resolution of module './b2' to file 'f2.ts' from old program.",
"Reusing resolution of module './f1' to file 'f2.ts' from old program."
"Reusing resolution of module './b2' from 'f2.ts' of old program, it was successfully resolved to 'b2.ts'.",
"Reusing resolution of module './f1' from 'f2.ts' of old program, it was successfully resolved to 'f1.ts'.",
], "program_7 should reuse module resolutions in f2 since it is unchanged");
}
});

View file

@ -515,6 +515,10 @@ namespace ts.projectSystem {
expectedTrace.push(`======== Module name '${moduleName}' was successfully resolved to '${module.path}'. ========`);
}
function getExpectedModuleResolutionFromCacheTrace(containingFile: File, module: File, moduleName: string, cacheLocation: string): string {
return `Reusing resolution of module '${moduleName}' from '${containingFile.path}' found in cache from location '${cacheLocation}', it was successfully resolved to '${module.path}'.`;
}
function getExpectedRelativeModuleResolutionTrace(host: TestServerHost, file: File, module: File, moduleName: string, expectedTrace: string[] = []) {
getExpectedResolutionTraceHeader(expectedTrace, file, moduleName);
expectedTrace.push(`Loading module as file / folder, candidate module location '${removeFileExtension(module.path)}', target file type 'TypeScript'.`);
@ -540,8 +544,8 @@ namespace ts.projectSystem {
return expectedTrace;
}
function getExpectedReusingResolutionFromOldProgram(file: File, moduleName: string) {
return `Reusing resolution of module '${moduleName}' to file '${file.path}' from old program.`;
function getExpectedReusingResolutionFromOldProgram(file: File, moduleFile: File, moduleName: string) {
return `Reusing resolution of module '${moduleName}' from '${file.path}' of old program, it was successfully resolved to '${moduleFile.path}'.`;
}
function verifyWatchesWithConfigFile(host: TestServerHost, files: File[], openFile: File, extraExpectedDirectories?: readonly string[]) {
@ -587,6 +591,8 @@ namespace ts.projectSystem {
service.openClientFile(file1.path);
const expectedTrace = getExpectedRelativeModuleResolutionTrace(host, file1, module1, module1Name);
getExpectedRelativeModuleResolutionTrace(host, file1, module2, module2Name, expectedTrace);
expectedTrace.push(getExpectedModuleResolutionFromCacheTrace(file2, module1, module1Name, `${tscWatch.projectRoot}/src`));
expectedTrace.push(getExpectedModuleResolutionFromCacheTrace(file2, module2, module2Name, `${tscWatch.projectRoot}/src`));
verifyTrace(resolutionTrace, expectedTrace);
verifyWatchesWithConfigFile(host, files, file1);
@ -594,8 +600,10 @@ namespace ts.projectSystem {
host.writeFile(file2.path, file2.content + fileContent);
host.runQueuedTimeoutCallbacks();
verifyTrace(resolutionTrace, [
getExpectedReusingResolutionFromOldProgram(file1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2Name)
getExpectedReusingResolutionFromOldProgram(file1, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file2, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file2, module2, module2Name),
]);
verifyWatchesWithConfigFile(host, files, file1);
});
@ -614,6 +622,8 @@ namespace ts.projectSystem {
service.openClientFile(file1.path);
const expectedTrace = getExpectedNonRelativeModuleResolutionTrace(host, file1, module1, module1Name);
getExpectedNonRelativeModuleResolutionTrace(host, file1, module2, module2Name, expectedTrace);
expectedTrace.push(getExpectedModuleResolutionFromCacheTrace(file2, module1, module1Name, `${tscWatch.projectRoot}/src`));
expectedTrace.push(getExpectedModuleResolutionFromCacheTrace(file2, module2, module2Name, `${tscWatch.projectRoot}/src`));
verifyTrace(resolutionTrace, expectedTrace);
verifyWatchesWithConfigFile(host, files, file1, expectedNonRelativeDirectories);
@ -621,8 +631,10 @@ namespace ts.projectSystem {
host.writeFile(file2.path, file2.content + fileContent);
host.runQueuedTimeoutCallbacks();
verifyTrace(resolutionTrace, [
getExpectedReusingResolutionFromOldProgram(file1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2Name)
getExpectedReusingResolutionFromOldProgram(file1, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file2, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file2, module2, module2Name),
]);
verifyWatchesWithConfigFile(host, files, file1, expectedNonRelativeDirectories);
});
@ -685,8 +697,14 @@ namespace ts.projectSystem {
host.runQueuedTimeoutCallbacks();
verifyTrace(resolutionTrace, [
getExpectedReusingResolutionFromOldProgram(file1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2Name)
getExpectedReusingResolutionFromOldProgram(file1, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file2, module1, module3Name),
getExpectedReusingResolutionFromOldProgram(file2, module2, module4Name),
getExpectedReusingResolutionFromOldProgram(file4, module1, module6Name),
getExpectedReusingResolutionFromOldProgram(file4, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file3, module1, module5Name),
getExpectedReusingResolutionFromOldProgram(file3, module2, module4Name),
]);
verifyWatchesWithConfigFile(host, files, file1);
});
@ -721,8 +739,14 @@ namespace ts.projectSystem {
host.runQueuedTimeoutCallbacks();
verifyTrace(resolutionTrace, [
getExpectedReusingResolutionFromOldProgram(file1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2Name)
getExpectedReusingResolutionFromOldProgram(file1, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file2, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file2, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file4, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file4, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file3, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file3, module2, module2Name),
]);
verifyWatchesWithConfigFile(host, files, file1, expectedNonRelativeDirectories);
});
@ -772,11 +796,17 @@ namespace ts.projectSystem {
host.runQueuedTimeoutCallbacks();
verifyTrace(resolutionTrace, [
getExpectedReusingResolutionFromOldProgram(file1, file2Name),
getExpectedReusingResolutionFromOldProgram(file1, file4Name),
getExpectedReusingResolutionFromOldProgram(file1, file3Name),
getExpectedReusingResolutionFromOldProgram(file1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2Name)
getExpectedReusingResolutionFromOldProgram(file1, file2, file2Name),
getExpectedReusingResolutionFromOldProgram(file1, file4, file4Name),
getExpectedReusingResolutionFromOldProgram(file1, file3, file3Name),
getExpectedReusingResolutionFromOldProgram(file1, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file1, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file2, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file2, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file4, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file4, module2, module2Name),
getExpectedReusingResolutionFromOldProgram(file3, module1, module1Name),
getExpectedReusingResolutionFromOldProgram(file3, module2, module2Name),
]);
checkWatches();