Skip to content

Commit 6bde4b5

Browse files
authored
Fix missing file name of extended source file in synchronizeProjectList when it is missing on disk (#41222)
Fixes #40136
1 parent 6428140 commit 6bde4b5

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1578,7 +1578,7 @@ namespace ts {
15781578
*/
15791579
export function readJsonConfigFile(fileName: string, readFile: (path: string) => string | undefined): TsConfigSourceFile {
15801580
const textOrDiagnostic = tryReadFile(fileName, readFile);
1581-
return isString(textOrDiagnostic) ? parseJsonText(fileName, textOrDiagnostic) : <TsConfigSourceFile>{ parseDiagnostics: [textOrDiagnostic] };
1581+
return isString(textOrDiagnostic) ? parseJsonText(fileName, textOrDiagnostic) : <TsConfigSourceFile>{ fileName, parseDiagnostics: [textOrDiagnostic] };
15821582
}
15831583

15841584
/*@internal*/

src/testRunner/unittests/tsserver/projects.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,6 +1481,48 @@ namespace ts.projectSystem {
14811481
]);
14821482
});
14831483

1484+
it("synchronizeProjectList returns correct information when base configuration file cannot be resolved", () => {
1485+
const file: File = {
1486+
path: `${tscWatch.projectRoot}/index.ts`,
1487+
content: "export const foo = 5;"
1488+
};
1489+
const config: File = {
1490+
path: `${tscWatch.projectRoot}/tsconfig.json`,
1491+
content: JSON.stringify({ extends: "./tsconfig_base.json" })
1492+
};
1493+
const host = createServerHost([file, config, libFile]);
1494+
const projectService = createProjectService(host);
1495+
projectService.openClientFile(file.path);
1496+
const knownProjects = projectService.synchronizeProjectList([], /*includeProjectReferenceRedirectInfo*/ false);
1497+
assert.deepEqual(knownProjects[0].files, [
1498+
libFile.path,
1499+
file.path,
1500+
config.path,
1501+
`${tscWatch.projectRoot}/tsconfig_base.json`,
1502+
]);
1503+
});
1504+
1505+
it("synchronizeProjectList returns correct information when base configuration file cannot be resolved and redirect info is requested", () => {
1506+
const file: File = {
1507+
path: `${tscWatch.projectRoot}/index.ts`,
1508+
content: "export const foo = 5;"
1509+
};
1510+
const config: File = {
1511+
path: `${tscWatch.projectRoot}/tsconfig.json`,
1512+
content: JSON.stringify({ extends: "./tsconfig_base.json" })
1513+
};
1514+
const host = createServerHost([file, config, libFile]);
1515+
const projectService = createProjectService(host);
1516+
projectService.openClientFile(file.path);
1517+
const knownProjects = projectService.synchronizeProjectList([], /*includeProjectReferenceRedirectInfo*/ true);
1518+
assert.deepEqual(knownProjects[0].files, [
1519+
{ fileName: libFile.path, isSourceOfProjectReferenceRedirect: false },
1520+
{ fileName: file.path, isSourceOfProjectReferenceRedirect: false },
1521+
{ fileName: config.path, isSourceOfProjectReferenceRedirect: false },
1522+
{ fileName: `${tscWatch.projectRoot}/tsconfig_base.json`, isSourceOfProjectReferenceRedirect: false },
1523+
]);
1524+
});
1525+
14841526
it("handles delayed directory watch invoke on file creation", () => {
14851527
const projectRootPath = "/users/username/projects/project";
14861528
const fileB: File = {

0 commit comments

Comments
 (0)