mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-09 20:51:43 -06:00
Handle case sensitivity when looking up config file for Script info
Fixes #17726
This commit is contained in:
parent
bce77fdfd9
commit
deed981715
@ -2917,6 +2917,52 @@ namespace ts.projectSystem {
|
||||
function checkSnapLength(snap: IScriptSnapshot, expectedLength: number) {
|
||||
assert.equal(snap.getLength(), expectedLength, "Incorrect snapshot size");
|
||||
}
|
||||
|
||||
function verifyOpenFileWorks(useCaseSensitiveFileNames: boolean) {
|
||||
const file1: FileOrFolder = {
|
||||
path: "/a/b/src/app.ts",
|
||||
content: "let x = 10;"
|
||||
};
|
||||
const file2: FileOrFolder = {
|
||||
path: "/a/B/lib/module2.ts",
|
||||
content: "let z = 10;"
|
||||
};
|
||||
const configFile: FileOrFolder = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: ""
|
||||
};
|
||||
const configFile2: FileOrFolder = {
|
||||
path: "/a/tsconfig.json",
|
||||
content: ""
|
||||
};
|
||||
const host = createServerHost([file1, file2, configFile, configFile2], {
|
||||
useCaseSensitiveFileNames
|
||||
});
|
||||
const service = createProjectService(host);
|
||||
|
||||
// Open file1 -> configFile
|
||||
verifyConfigFileName(file1, "/a", configFile);
|
||||
verifyConfigFileName(file1, "/a/b", configFile);
|
||||
verifyConfigFileName(file1, "/a/B", useCaseSensitiveFileNames ? undefined : configFile);
|
||||
|
||||
// Open file2 use root "/a/b"
|
||||
verifyConfigFileName(file2, "/a", useCaseSensitiveFileNames ? configFile2 : configFile);
|
||||
verifyConfigFileName(file2, "/a/b", useCaseSensitiveFileNames ? undefined : configFile);
|
||||
verifyConfigFileName(file2, "/a/B", useCaseSensitiveFileNames ? undefined : configFile);
|
||||
|
||||
function verifyConfigFileName(file: FileOrFolder, projectRoot: string, expectedConfigFile: FileOrFolder | undefined) {
|
||||
const { configFileName } = service.openClientFile(file.path, /*fileContent*/ undefined, /*scriptKind*/ undefined, projectRoot);
|
||||
assert.equal(configFileName, expectedConfigFile && expectedConfigFile.path);
|
||||
service.closeClientFile(file.path);
|
||||
}
|
||||
}
|
||||
it("works when project root is used with case-sensitive system", () => {
|
||||
verifyOpenFileWorks(/*useCaseSensitiveFileNames*/ true);
|
||||
});
|
||||
|
||||
it("works when project root is used with case-insensitive system", () => {
|
||||
verifyOpenFileWorks(/*useCaseSensitiveFileNames*/ false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Language service", () => {
|
||||
|
||||
@ -1218,7 +1218,7 @@ namespace ts.server {
|
||||
projectRootPath?: NormalizedPath) {
|
||||
let searchPath = asNormalizedPath(getDirectoryPath(info.fileName));
|
||||
|
||||
while (!projectRootPath || stringContains(searchPath, projectRootPath)) {
|
||||
while (!projectRootPath || containsPath(projectRootPath, searchPath, this.currentDirectory, !this.host.useCaseSensitiveFileNames)) {
|
||||
const canonicalSearchPath = normalizedPathToPath(searchPath, this.currentDirectory, this.toCanonicalFileName);
|
||||
const tsconfigFileName = asNormalizedPath(combinePaths(searchPath, "tsconfig.json"));
|
||||
let result = action(tsconfigFileName, combinePaths(canonicalSearchPath, "tsconfig.json"));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user