Skip to content

Commit e51cbc8

Browse files
authored
Do not lowercase typeReference directive name (#58525)
1 parent 524456f commit e51cbc8

File tree

9 files changed

+188
-13
lines changed

9 files changed

+188
-13
lines changed

src/compiler/program.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,8 +1058,7 @@ export function createModuleResolutionLoader(
10581058
}
10591059

10601060
function getTypeReferenceResolutionName<T extends FileReference | string>(entry: T) {
1061-
// We lower-case all type references because npm automatically lowercases all packages. See GH#9824.
1062-
return !isString(entry) ? toFileNameLowerCase(entry.fileName) : entry;
1061+
return !isString(entry) ? entry.fileName : entry;
10631062
}
10641063

10651064
const typeReferenceResolutionNameAndModeGetter: ResolutionNameAndModeGetter<FileReference | string, SourceFile | undefined> = {
@@ -2088,7 +2087,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
20882087
}
20892088

20902089
function getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(typeRef: FileReference, sourceFile: SourceFile) {
2091-
return getResolvedTypeReferenceDirective(sourceFile, toFileNameLowerCase(typeRef.fileName), typeRef.resolutionMode || sourceFile.impliedNodeFormat);
2090+
return getResolvedTypeReferenceDirective(sourceFile, typeRef.fileName, typeRef.resolutionMode || sourceFile.impliedNodeFormat);
20922091
}
20932092

20942093
function forEachResolvedModule(
@@ -3994,7 +3993,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
39943993
const ref = file.typeReferenceDirectives[index];
39953994
const resolvedTypeReferenceDirective = resolutions[index];
39963995
// store resolved type directive on the file
3997-
const fileName = toFileNameLowerCase(ref.fileName);
3996+
const fileName = ref.fileName;
39983997
resolutionsInFile.set(fileName, getModeForFileReference(ref, file.impliedNodeFormat), resolvedTypeReferenceDirective);
39993998
const mode = ref.resolutionMode || getDefaultResolutionModeForFile(file);
40003999
processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: FileIncludeKind.TypeReferenceDirective, file: file.path, index });

src/testRunner/unittests/tsc/forceConsistentCasingInFileNames.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,19 @@ describe("unittests:: tsc:: forceConsistentCasingInFileNames::", () => {
2626
commandLineArgs: ["-p", "/home/src/projects/project/tsconfig.json", "--explainFiles"],
2727
fs: () => loadProjectFromFiles(getFsContentsForMultipleErrorsForceConsistentCasingInFileNames()),
2828
});
29+
30+
verifyTsc({
31+
scenario: "forceConsistentCasingInFileNames",
32+
subScenario: "with type ref from file",
33+
commandLineArgs: ["-p", "/src/project/src", "--explainFiles", "--traceResolution"],
34+
fs: () =>
35+
loadProjectFromFiles({
36+
"/src/project/src/fileOne.d.ts": `declare class c { }`,
37+
"/src/project/src/file2.d.ts": dedent`
38+
/// <reference types="./fileOne.d.ts"/>
39+
declare const y: c;
40+
`,
41+
"/src/project/src/tsconfig.json": "{ }",
42+
}),
43+
});
2944
});

src/testRunner/unittests/tsserver/typeReferenceDirectives.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
libFile,
1111
} from "../helpers/virtualFileSystemWithWatch.js";
1212

13-
describe("unittests:: tsserver:: typeReferenceDirectives", () => {
13+
describe("unittests:: tsserver:: typeReferenceDirectives::", () => {
1414
it("when typeReferenceDirective contains UpperCasePackage", () => {
1515
const libProjectLocation = `/user/username/projects/myproject/lib`;
1616
const typeLib: File = {
@@ -52,6 +52,7 @@ declare class TestLib {
5252
compilerOptions: {
5353
module: "amd",
5454
typeRoots: ["../lib/@types", "../lib/@app"],
55+
traceResolution: true,
5556
},
5657
}),
5758
};
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
currentDirectory:: / useCaseSensitiveFileNames: false
2+
Input::
3+
//// [/lib/lib.d.ts]
4+
/// <reference no-default-lib="true"/>
5+
interface Boolean {}
6+
interface Function {}
7+
interface CallableFunction {}
8+
interface NewableFunction {}
9+
interface IArguments {}
10+
interface Number { toExponential: any; }
11+
interface Object {}
12+
interface RegExp {}
13+
interface String { charAt: any; }
14+
interface Array<T> { length: number; [n: number]: T; }
15+
interface ReadonlyArray<T> {}
16+
declare const console: { log(msg: any): void; };
17+
18+
//// [/src/project/src/file2.d.ts]
19+
/// <reference types="./fileOne.d.ts"/>
20+
declare const y: c;
21+
22+
23+
//// [/src/project/src/fileOne.d.ts]
24+
declare class c { }
25+
26+
//// [/src/project/src/tsconfig.json]
27+
{ }
28+
29+
30+
31+
Output::
32+
/lib/tsc -p /src/project/src --explainFiles --traceResolution
33+
File '/src/project/src/package.json' does not exist.
34+
File '/src/project/package.json' does not exist.
35+
File '/src/package.json' does not exist.
36+
File '/package.json' does not exist.
37+
======== Resolving type reference directive './fileOne.d.ts', containing file '/src/project/src/file2.d.ts', root directory '/src/project/src/node_modules/@types,/src/project/node_modules/@types,/src/node_modules/@types,/node_modules/@types'. ========
38+
Resolving with primary search path '/src/project/src/node_modules/@types, /src/project/node_modules/@types, /src/node_modules/@types, /node_modules/@types'.
39+
Directory '/src/project/src/node_modules/@types' does not exist, skipping all lookups in it.
40+
Directory '/src/project/node_modules/@types' does not exist, skipping all lookups in it.
41+
Directory '/src/node_modules/@types' does not exist, skipping all lookups in it.
42+
Directory '/node_modules/@types' does not exist, skipping all lookups in it.
43+
Looking up in 'node_modules' folder, initial location '/src/project/src'.
44+
Loading module as file / folder, candidate module location '/src/project/src/fileOne.d.ts', target file types: Declaration.
45+
File name '/src/project/src/fileOne.d.ts' has a '.d.ts' extension - stripping it.
46+
File '/src/project/src/fileOne.d.ts' exists - use it as a name resolution result.
47+
Resolving real path for '/src/project/src/fileOne.d.ts', result '/src/project/src/fileOne.d.ts'.
48+
======== Type reference directive './fileOne.d.ts' was successfully resolved to '/src/project/src/fileOne.d.ts', primary: false. ========
49+
File '/src/project/src/package.json' does not exist according to earlier cached lookups.
50+
File '/src/project/package.json' does not exist according to earlier cached lookups.
51+
File '/src/package.json' does not exist according to earlier cached lookups.
52+
File '/package.json' does not exist according to earlier cached lookups.
53+
File '/lib/package.json' does not exist.
54+
File '/package.json' does not exist according to earlier cached lookups.
55+
lib/lib.d.ts
56+
Default library for target 'es5'
57+
src/project/src/fileOne.d.ts
58+
Type library referenced via './fileOne.d.ts' from file 'src/project/src/file2.d.ts'
59+
Matched by default include pattern '**/*'
60+
src/project/src/file2.d.ts
61+
Matched by default include pattern '**/*'
62+
exitCode:: ExitStatus.Success
63+
64+

tests/baselines/reference/tsserver/typeReferenceDirectives/when-typeReferenceDirective-contains-UpperCasePackage.js

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ class TestClass1 {
3737
"typeRoots": [
3838
"../lib/@types",
3939
"../lib/@app"
40-
]
40+
],
41+
"traceResolution": true
4142
}
4243
}
4344

@@ -87,16 +88,64 @@ Info seq [hh:mm:ss:mss] Config: /user/username/projects/myproject/test/tsconfig
8788
"/user/username/projects/myproject/lib/@types",
8889
"/user/username/projects/myproject/lib/@app"
8990
],
91+
"traceResolution": true,
9092
"configFilePath": "/user/username/projects/myproject/test/tsconfig.json"
9193
}
9294
}
9395
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/test 1 undefined Config: /user/username/projects/myproject/test/tsconfig.json WatchType: Wild card directory
9496
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/test 1 undefined Config: /user/username/projects/myproject/test/tsconfig.json WatchType: Wild card directory
9597
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/test/tsconfig.json
98+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/test/package.json' does not exist.
99+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist.
100+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist.
101+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist.
102+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist.
103+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist.
104+
Info seq [hh:mm:ss:mss] ======== Resolving type reference directive 'UpperCasePackage', containing file '/user/username/projects/myproject/test/__inferred type names__.ts', root directory '/user/username/projects/myproject/lib/@types,/user/username/projects/myproject/lib/@app'. ========
105+
Info seq [hh:mm:ss:mss] Resolving with primary search path '/user/username/projects/myproject/lib/@types, /user/username/projects/myproject/lib/@app'.
106+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage.d.ts' does not exist.
107+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/package.json' does not exist.
108+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts' exists - use it as a name resolution result.
109+
Info seq [hh:mm:ss:mss] Resolving real path for '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts', result '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts'.
110+
Info seq [hh:mm:ss:mss] ======== Type reference directive 'UpperCasePackage' was successfully resolved to '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts', primary: true. ========
96111
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib 1 undefined Project: /user/username/projects/myproject/test/tsconfig.json WatchType: Failed Lookup Locations
97112
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib 1 undefined Project: /user/username/projects/myproject/test/tsconfig.json WatchType: Failed Lookup Locations
113+
Info seq [hh:mm:ss:mss] ======== Resolving type reference directive 'lib', containing file '/user/username/projects/myproject/test/__inferred type names__.ts', root directory '/user/username/projects/myproject/lib/@types,/user/username/projects/myproject/lib/@app'. ========
114+
Info seq [hh:mm:ss:mss] Resolving with primary search path '/user/username/projects/myproject/lib/@types, /user/username/projects/myproject/lib/@app'.
115+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/lib.d.ts' does not exist.
116+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/lib.d.ts' does not exist.
117+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/lib/package.json' does not exist.
118+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/lib/index.d.ts' exists - use it as a name resolution result.
119+
Info seq [hh:mm:ss:mss] Resolving real path for '/user/username/projects/myproject/lib/@app/lib/index.d.ts', result '/user/username/projects/myproject/lib/@app/lib/index.d.ts'.
120+
Info seq [hh:mm:ss:mss] ======== Type reference directive 'lib' was successfully resolved to '/user/username/projects/myproject/lib/@app/lib/index.d.ts', primary: true. ========
121+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/package.json' does not exist according to earlier cached lookups.
122+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/package.json' does not exist.
123+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/package.json' does not exist.
124+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
125+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
126+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist according to earlier cached lookups.
127+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist according to earlier cached lookups.
128+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
98129
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts 500 undefined WatchType: Closed Script info
130+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/lib/package.json' does not exist according to earlier cached lookups.
131+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/package.json' does not exist.
132+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/package.json' does not exist according to earlier cached lookups.
133+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
134+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
135+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist according to earlier cached lookups.
136+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist according to earlier cached lookups.
137+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
99138
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib/@app/lib/index.d.ts 500 undefined WatchType: Closed Script info
139+
Info seq [hh:mm:ss:mss] ======== Resolving type reference directive 'UpperCasePackage', containing file '/user/username/projects/myproject/lib/@app/lib/index.d.ts', root directory '/user/username/projects/myproject/lib/@types,/user/username/projects/myproject/lib/@app'. ========
140+
Info seq [hh:mm:ss:mss] Resolving with primary search path '/user/username/projects/myproject/lib/@types, /user/username/projects/myproject/lib/@app'.
141+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage.d.ts' does not exist.
142+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/package.json' does not exist according to earlier cached lookups.
143+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts' exists - use it as a name resolution result.
144+
Info seq [hh:mm:ss:mss] Resolving real path for '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts', result '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts'.
145+
Info seq [hh:mm:ss:mss] ======== Type reference directive 'UpperCasePackage' was successfully resolved to '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts', primary: true. ========
146+
Info seq [hh:mm:ss:mss] File '/a/lib/package.json' does not exist.
147+
Info seq [hh:mm:ss:mss] File '/a/package.json' does not exist.
148+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
100149
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 500 undefined WatchType: Closed Script info
101150
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib/@types 1 undefined Project: /user/username/projects/myproject/test/tsconfig.json WatchType: Type roots
102151
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/lib/@types 1 undefined Project: /user/username/projects/myproject/test/tsconfig.json WatchType: Type roots
@@ -117,7 +166,6 @@ Info seq [hh:mm:ss:mss] Files (4)
117166
Matched by default include pattern '**/*'
118167
../lib/@types/UpperCasePackage/index.d.ts
119168
Entry point for implicit type library 'UpperCasePackage'
120-
Type library referenced via 'UpperCasePackage' from file '../lib/@app/lib/index.d.ts'
121169
../lib/@app/lib/index.d.ts
122170
Entry point for implicit type library 'lib'
123171

@@ -159,7 +207,8 @@ Info seq [hh:mm:ss:mss] event:
159207
"typeRoots": [
160208
"",
161209
""
162-
]
210+
],
211+
"traceResolution": true
163212
},
164213
"typeAcquisition": {
165214
"enable": false,
@@ -292,6 +341,32 @@ ScriptInfos::
292341

293342
Info seq [hh:mm:ss:mss] Running: /user/username/projects/myproject/test/tsconfig.json
294343
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /user/username/projects/myproject/test/tsconfig.json
344+
Info seq [hh:mm:ss:mss] File '/a/lib/package.json' does not exist according to earlier cached lookups.
345+
Info seq [hh:mm:ss:mss] File '/a/package.json' does not exist according to earlier cached lookups.
346+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
347+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/test/package.json' does not exist according to earlier cached lookups.
348+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
349+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
350+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist according to earlier cached lookups.
351+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist according to earlier cached lookups.
352+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
353+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/UpperCasePackage/package.json' does not exist according to earlier cached lookups.
354+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@types/package.json' does not exist according to earlier cached lookups.
355+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/package.json' does not exist according to earlier cached lookups.
356+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
357+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
358+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist according to earlier cached lookups.
359+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist according to earlier cached lookups.
360+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
361+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/lib/package.json' does not exist according to earlier cached lookups.
362+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/@app/package.json' does not exist according to earlier cached lookups.
363+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/lib/package.json' does not exist according to earlier cached lookups.
364+
Info seq [hh:mm:ss:mss] File '/user/username/projects/myproject/package.json' does not exist according to earlier cached lookups.
365+
Info seq [hh:mm:ss:mss] File '/user/username/projects/package.json' does not exist according to earlier cached lookups.
366+
Info seq [hh:mm:ss:mss] File '/user/username/package.json' does not exist according to earlier cached lookups.
367+
Info seq [hh:mm:ss:mss] File '/user/package.json' does not exist according to earlier cached lookups.
368+
Info seq [hh:mm:ss:mss] File '/package.json' does not exist according to earlier cached lookups.
369+
Info seq [hh:mm:ss:mss] Reusing resolution of type reference directive 'UpperCasePackage' from '/user/username/projects/myproject/lib/@app/lib/index.d.ts' of old program, it was successfully resolved to '/user/username/projects/myproject/lib/@types/UpperCasePackage/index.d.ts'.
295370
Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /user/username/projects/myproject/test/tsconfig.json projectStateVersion: 2 projectProgramVersion: 1 structureChanged: false structureIsReused:: Completely Elapsed:: *ms
296371
Info seq [hh:mm:ss:mss] Project '/user/username/projects/myproject/test/tsconfig.json' (Configured)
297372
Info seq [hh:mm:ss:mss] Files (4)

0 commit comments

Comments
 (0)