Skip to content

Commit 555f35e

Browse files
committed
Merge pull request microsoft#6803 from Microsoft/noDirExistsCheckInClassic
don't do 'directoryExists' check in classic resolution scheme
2 parents 078ebb9 + f94c720 commit 555f35e

7 files changed

Lines changed: 13 additions & 30 deletions

src/compiler/program.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ namespace ts {
8888
host: ModuleResolutionHost;
8989
compilerOptions: CompilerOptions;
9090
traceEnabled: boolean;
91+
// skip .tsx files if jsx is not enabled
92+
skipTsx: boolean;
9193
}
9294

9395
export function resolveModuleName(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
@@ -369,7 +371,7 @@ namespace ts {
369371
const traceEnabled = isTraceEnabled(compilerOptions, host);
370372

371373
const failedLookupLocations: string[] = [];
372-
const state = {compilerOptions, host, traceEnabled};
374+
const state = {compilerOptions, host, traceEnabled, skipTsx: false};
373375
let resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName,
374376
failedLookupLocations, supportedExtensions, state);
375377

@@ -418,6 +420,9 @@ namespace ts {
418420
return forEach(extensions, tryLoad);
419421

420422
function tryLoad(ext: string): string {
423+
if (ext === ".tsx" && state.skipTsx) {
424+
return undefined;
425+
}
421426
const fileName = fileExtensionIs(candidate, ext) ? candidate : candidate + ext;
422427
if (!onlyRecordFailures && state.host.fileExists(fileName)) {
423428
if (state.traceEnabled) {
@@ -517,7 +522,7 @@ namespace ts {
517522

518523
export function classicNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations {
519524
const traceEnabled = isTraceEnabled(compilerOptions, host);
520-
const state = { compilerOptions, host, traceEnabled };
525+
const state = { compilerOptions, host, traceEnabled, skipTsx: !compilerOptions.jsx };
521526
const failedLookupLocations: string[] = [];
522527
const supportedExtensions = getSupportedExtensions(compilerOptions);
523528
let containingDirectory = getDirectoryPath(containingFile);
@@ -530,8 +535,7 @@ namespace ts {
530535
let referencedSourceFile: string;
531536
while (true) {
532537
const searchName = normalizePath(combinePaths(containingDirectory, moduleName));
533-
const directoryName = getDirectoryPath(searchName);
534-
referencedSourceFile = loadModuleFromFile(searchName, supportedExtensions, failedLookupLocations, !directoryProbablyExists(directoryName, host), state);
538+
referencedSourceFile = loadModuleFromFile(searchName, supportedExtensions, failedLookupLocations, /*onlyRecordFailures*/ false, state);
535539
if (referencedSourceFile) {
536540
break;
537541
}

tests/baselines/reference/pathMappingBasedModuleResolution3_classic.trace.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,10 @@
1414
"'baseUrl' option is set to 'c:/root', using this value to resolve non-relative module name 'file4'",
1515
"Resolving module name 'file4' relative to base url 'c:/root' - 'c:/root/file4'.",
1616
"File 'c:/root/file4.ts' does not exist.",
17-
"File 'c:/root/file4.tsx' does not exist.",
1817
"File 'c:/root/file4.d.ts' does not exist.",
1918
"File 'c:/root/folder2/file4.ts' does not exist.",
20-
"File 'c:/root/folder2/file4.tsx' does not exist.",
2119
"File 'c:/root/folder2/file4.d.ts' does not exist.",
2220
"File 'c:/root/file4.ts' does not exist.",
23-
"File 'c:/root/file4.tsx' does not exist.",
2421
"File 'c:/root/file4.d.ts' does not exist.",
2522
"File 'c:/file4.ts' exist - use it as a module resolution result.",
2623
"======== Module name 'file4' was successfully resolved to 'c:/file4.ts'. ========"

tests/baselines/reference/pathMappingBasedModuleResolution4_classic.trace.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,10 @@
1414
"'baseUrl' option is set to 'c:/root', using this value to resolve non-relative module name 'file4'",
1515
"Resolving module name 'file4' relative to base url 'c:/root' - 'c:/root/file4'.",
1616
"File 'c:/root/file4.ts' does not exist.",
17-
"File 'c:/root/file4.tsx' does not exist.",
1817
"File 'c:/root/file4.d.ts' does not exist.",
1918
"File 'c:/root/folder2/file4.ts' does not exist.",
20-
"File 'c:/root/folder2/file4.tsx' does not exist.",
2119
"File 'c:/root/folder2/file4.d.ts' does not exist.",
2220
"File 'c:/root/file4.ts' does not exist.",
23-
"File 'c:/root/file4.tsx' does not exist.",
2421
"File 'c:/root/file4.d.ts' does not exist.",
2522
"File 'c:/file4.ts' exist - use it as a module resolution result.",
2623
"======== Module name 'file4' was successfully resolved to 'c:/file4.ts'. ========"

tests/baselines/reference/pathMappingBasedModuleResolution5_classic.trace.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
"Module name 'folder3/file2', matched pattern '*'.",
1515
"Trying substitution '*', candidate module location: 'folder3/file2'.",
1616
"File 'c:/root/folder3/file2.ts' does not exist.",
17-
"File 'c:/root/folder3/file2.tsx' does not exist.",
1817
"File 'c:/root/folder3/file2.d.ts' does not exist.",
1918
"Trying substitution 'generated/*', candidate module location: 'generated/folder3/file2'.",
2019
"File 'c:/root/generated/folder3/file2.ts' exist - use it as a module resolution result.",
@@ -34,17 +33,13 @@
3433
"Module name 'file4', matched pattern '*'.",
3534
"Trying substitution '*', candidate module location: 'file4'.",
3635
"File 'c:/root/file4.ts' does not exist.",
37-
"File 'c:/root/file4.tsx' does not exist.",
3836
"File 'c:/root/file4.d.ts' does not exist.",
3937
"Trying substitution 'generated/*', candidate module location: 'generated/file4'.",
4038
"File 'c:/root/generated/file4.ts' does not exist.",
41-
"File 'c:/root/generated/file4.tsx' does not exist.",
4239
"File 'c:/root/generated/file4.d.ts' does not exist.",
4340
"File 'c:/root/folder1/file4.ts' does not exist.",
44-
"File 'c:/root/folder1/file4.tsx' does not exist.",
4541
"File 'c:/root/folder1/file4.d.ts' does not exist.",
4642
"File 'c:/root/file4.ts' does not exist.",
47-
"File 'c:/root/file4.tsx' does not exist.",
4843
"File 'c:/root/file4.d.ts' does not exist.",
4944
"File 'c:/file4.ts' exist - use it as a module resolution result.",
5045
"======== Module name 'file4' was successfully resolved to 'c:/file4.ts'. ========"

tests/baselines/reference/pathMappingBasedModuleResolution6_classic.trace.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"Longest matching prefix for 'c:/root/src/project/file3' is 'c:/root/src/'",
88
"Loading 'project/file3' from the root dir 'c:/root/src/', candidate location 'c:/root/src/project/file3'",
99
"File 'c:/root/src/project/file3.ts' does not exist.",
10-
"File 'c:/root/src/project/file3.tsx' does not exist.",
1110
"File 'c:/root/src/project/file3.d.ts' does not exist.",
1211
"Trying other entries in 'rootDirs'",
1312
"Loading 'project/file3' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file3'",
@@ -21,12 +20,10 @@
2120
"Longest matching prefix for 'c:/root/generated/src/file2' is 'c:/root/generated/src/'",
2221
"Loading 'file2' from the root dir 'c:/root/generated/src/', candidate location 'c:/root/generated/src/file2'",
2322
"File 'c:/root/generated/src/file2.ts' does not exist.",
24-
"File 'c:/root/generated/src/file2.tsx' does not exist.",
2523
"File 'c:/root/generated/src/file2.d.ts' does not exist.",
2624
"Trying other entries in 'rootDirs'",
2725
"Loading 'file2' from the root dir 'c:/root/src', candidate location 'c:/root/src/file2'",
2826
"File 'c:/root/src/file2.ts' does not exist.",
29-
"File 'c:/root/src/file2.tsx' does not exist.",
3027
"File 'c:/root/src/file2.d.ts' exist - use it as a module resolution result.",
3128
"======== Module name '../file2' was successfully resolved to 'c:/root/src/file2.d.ts'. ========"
3229
]

tests/baselines/reference/pathMappingBasedModuleResolution7_classic.trace.json

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
"Longest matching prefix for 'c:/root/src/project/file2' is 'c:/root/src/'",
88
"Loading 'project/file2' from the root dir 'c:/root/src/', candidate location 'c:/root/src/project/file2'",
99
"File 'c:/root/src/project/file2.ts' does not exist.",
10-
"File 'c:/root/src/project/file2.tsx' does not exist.",
1110
"File 'c:/root/src/project/file2.d.ts' does not exist.",
1211
"Trying other entries in 'rootDirs'",
1312
"Loading 'project/file2' from the root dir 'c:/root/generated/src', candidate location 'c:/root/generated/src/project/file2'",
@@ -20,20 +19,15 @@
2019
"Module name 'module3', matched pattern '*'.",
2120
"Trying substitution '*', candidate module location: 'module3'.",
2221
"File 'c:/root/module3.ts' does not exist.",
23-
"File 'c:/root/module3.tsx' does not exist.",
2422
"File 'c:/root/module3.d.ts' does not exist.",
2523
"Trying substitution 'c:/shared/*', candidate module location: 'c:/shared/module3'.",
2624
"File 'c:/shared/module3.ts' does not exist.",
27-
"File 'c:/shared/module3.tsx' does not exist.",
2825
"File 'c:/shared/module3.d.ts' does not exist.",
2926
"File 'c:/root/src/module3.ts' does not exist.",
30-
"File 'c:/root/src/module3.tsx' does not exist.",
3127
"File 'c:/root/src/module3.d.ts' does not exist.",
3228
"File 'c:/root/module3.ts' does not exist.",
33-
"File 'c:/root/module3.tsx' does not exist.",
3429
"File 'c:/root/module3.d.ts' does not exist.",
3530
"File 'c:/module3.ts' does not exist.",
36-
"File 'c:/module3.tsx' does not exist.",
3731
"File 'c:/module3.d.ts' exist - use it as a module resolution result.",
3832
"======== Module name 'module3' was successfully resolved to 'c:/module3.d.ts'. ========",
3933
"======== Resolving module 'module1' from 'c:/root/generated/src/project/file2.ts'. ========",
@@ -43,11 +37,9 @@
4337
"Module name 'module1', matched pattern '*'.",
4438
"Trying substitution '*', candidate module location: 'module1'.",
4539
"File 'c:/root/module1.ts' does not exist.",
46-
"File 'c:/root/module1.tsx' does not exist.",
4740
"File 'c:/root/module1.d.ts' does not exist.",
4841
"Trying substitution 'c:/shared/*', candidate module location: 'c:/shared/module1'.",
4942
"File 'c:/shared/module1.ts' does not exist.",
50-
"File 'c:/shared/module1.tsx' does not exist.",
5143
"File 'c:/shared/module1.d.ts' exist - use it as a module resolution result.",
5244
"======== Module name 'module1' was successfully resolved to 'c:/shared/module1.d.ts'. ========",
5345
"======== Resolving module 'templates/module2' from 'c:/root/generated/src/project/file2.ts'. ========",
@@ -66,12 +58,10 @@
6658
"Longest matching prefix for 'c:/root/generated/src/file3' is 'c:/root/generated/src/'",
6759
"Loading 'file3' from the root dir 'c:/root/generated/src/', candidate location 'c:/root/generated/src/file3'",
6860
"File 'c:/root/generated/src/file3.ts' does not exist.",
69-
"File 'c:/root/generated/src/file3.tsx' does not exist.",
7061
"File 'c:/root/generated/src/file3.d.ts' does not exist.",
7162
"Trying other entries in 'rootDirs'",
7263
"Loading 'file3' from the root dir 'c:/root/src', candidate location 'c:/root/src/file3'",
7364
"File 'c:/root/src/file3.ts' does not exist.",
74-
"File 'c:/root/src/file3.tsx' does not exist.",
7565
"File 'c:/root/src/file3.d.ts' exist - use it as a module resolution result.",
7666
"======== Module name '../file3' was successfully resolved to 'c:/root/src/file3.d.ts'. ========"
7767
]

tests/cases/unittests/moduleResolution.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ import b = require("./moduleB.ts");
532532
const m1: File = { name: "/root/x/m1.ts" }; // load from base url
533533
const m2: File = { name: "/m2.ts" }; // fallback to classic
534534

535-
const options: CompilerOptions = { moduleResolution: ModuleResolutionKind.Classic, baseUrl: "/root/x" };
535+
const options: CompilerOptions = { moduleResolution: ModuleResolutionKind.Classic, baseUrl: "/root/x", jsx: JsxEmit.React };
536536
const host = createModuleResolutionHost(hasDirectoryExists, main, m1, m2);
537537

538538
check("m1", main, m1);
@@ -565,6 +565,7 @@ import b = require("./moduleB.ts");
565565
const options: CompilerOptions = {
566566
moduleResolution: ModuleResolutionKind.NodeJs,
567567
baseUrl: "/root",
568+
jsx: JsxEmit.React,
568569
paths: {
569570
"*": [
570571
"*",
@@ -676,8 +677,8 @@ import b = require("./moduleB.ts");
676677
});
677678

678679
it ("classic + baseUrl + path mappings", () => {
680+
// classic mode does not use directoryExists
679681
test(/*hasDirectoryExists*/ false);
680-
test(/*hasDirectoryExists*/ true);
681682

682683
function test(hasDirectoryExists: boolean) {
683684
const main: File = { name: "/root/folder1/main.ts" };
@@ -690,6 +691,7 @@ import b = require("./moduleB.ts");
690691
const options: CompilerOptions = {
691692
moduleResolution: ModuleResolutionKind.Classic,
692693
baseUrl: "/root",
694+
jsx: JsxEmit.React,
693695
paths: {
694696
"*": [
695697
"*",
@@ -822,6 +824,7 @@ import b = require("./moduleB.ts");
822824
const host = createModuleResolutionHost(hasDirectoryExists, file1, file2, file3, file4);
823825
const options: CompilerOptions = {
824826
moduleResolution: ModuleResolutionKind.Classic,
827+
jsx: JsxEmit.React,
825828
rootDirs: [
826829
"/root",
827830
"/root/generated/"

0 commit comments

Comments
 (0)