Skip to content

Commit 20570b0

Browse files
authored
Merge pull request #15867 from Microsoft/configFileInListOfProjectFiles
Add config file names as part of project file names
2 parents ec2f967 + 7cf93f9 commit 20570b0

File tree

12 files changed

+194
-101
lines changed

12 files changed

+194
-101
lines changed

src/compiler/commandLineParser.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1526,7 +1526,7 @@ namespace ts {
15261526
if (ownConfig.extendedConfigPath) {
15271527
// copy the resolution stack so it is never reused between branches in potential diamond-problem scenarios.
15281528
resolutionStack = resolutionStack.concat([resolvedPath]);
1529-
const extendedConfig = getExtendedConfig(ownConfig.extendedConfigPath, host, basePath, getCanonicalFileName,
1529+
const extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, basePath, getCanonicalFileName,
15301530
resolutionStack, errors);
15311531
if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) {
15321532
const baseRaw = extendedConfig.raw;
@@ -1674,6 +1674,7 @@ namespace ts {
16741674
}
16751675

16761676
function getExtendedConfig(
1677+
sourceFile: JsonSourceFile,
16771678
extendedConfigPath: Path,
16781679
host: ts.ParseConfigHost,
16791680
basePath: string,
@@ -1682,6 +1683,9 @@ namespace ts {
16821683
errors: Diagnostic[],
16831684
): ParsedTsconfig | undefined {
16841685
const extendedResult = readJsonConfigFile(extendedConfigPath, path => host.readFile(path));
1686+
if (sourceFile) {
1687+
(sourceFile.extendedSourceFiles || (sourceFile.extendedSourceFiles = [])).push(extendedResult.fileName);
1688+
}
16851689
if (extendedResult.parseDiagnostics.length) {
16861690
errors.push(...extendedResult.parseDiagnostics);
16871691
return undefined;
@@ -1690,6 +1694,9 @@ namespace ts {
16901694
const extendedDirname = getDirectoryPath(extendedConfigPath);
16911695
const extendedConfig = parseConfig(/*json*/ undefined, extendedResult, host, extendedDirname,
16921696
getBaseFileName(extendedConfigPath), resolutionStack, errors);
1697+
if (sourceFile) {
1698+
sourceFile.extendedSourceFiles.push(...extendedResult.extendedSourceFiles);
1699+
}
16931700

16941701
if (isSuccessfulParsedTsconfig(extendedConfig)) {
16951702
// Update the paths to reflect base path

src/compiler/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,6 +2338,7 @@ namespace ts {
23382338

23392339
export interface JsonSourceFile extends SourceFile {
23402340
jsonObject?: ObjectLiteralExpression;
2341+
extendedSourceFiles?: string[];
23412342
}
23422343

23432344
export interface ScriptReferenceHost {

src/harness/unittests/projectErrors.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ namespace ts.projectSystem {
66
describe("Project errors", () => {
77
function checkProjectErrors(projectFiles: server.ProjectFilesWithTSDiagnostics, expectedErrors: string[]) {
88
assert.isTrue(projectFiles !== undefined, "missing project files");
9-
const errors = projectFiles.projectErrors;
9+
checkProjectErrorsWorker(projectFiles.projectErrors, expectedErrors);
10+
}
11+
12+
function checkProjectErrorsWorker(errors: Diagnostic[], expectedErrors: string[]) {
1013
assert.equal(errors ? errors.length : 0, expectedErrors.length, `expected ${expectedErrors.length} error in the list`);
1114
if (expectedErrors.length) {
1215
for (let i = 0; i < errors.length; i++) {
@@ -122,9 +125,13 @@ namespace ts.projectSystem {
122125
projectService.checkNumberOfProjects({ configuredProjects: 1 });
123126
const configuredProject = forEach(projectService.synchronizeProjectList([]), f => f.info.projectName === corruptedConfig.path && f);
124127
assert.isTrue(configuredProject !== undefined, "should find configured project");
125-
checkProjectErrors(configuredProject, [
128+
checkProjectErrors(configuredProject, []);
129+
const projectErrors = projectService.configuredProjects[0].getAllProjectErrors();
130+
checkProjectErrorsWorker(projectErrors, [
126131
"'{' expected."
127132
]);
133+
assert.isNotNull(projectErrors[0].file);
134+
assert.equal(projectErrors[0].file.fileName, corruptedConfig.path);
128135
}
129136
// fix config and trigger watcher
130137
host.reloadFS([file1, file2, correctConfig]);
@@ -134,6 +141,8 @@ namespace ts.projectSystem {
134141
const configuredProject = forEach(projectService.synchronizeProjectList([]), f => f.info.projectName === corruptedConfig.path && f);
135142
assert.isTrue(configuredProject !== undefined, "should find configured project");
136143
checkProjectErrors(configuredProject, []);
144+
const projectErrors = projectService.configuredProjects[0].getAllProjectErrors();
145+
checkProjectErrorsWorker(projectErrors, []);
137146
}
138147
});
139148

@@ -163,6 +172,8 @@ namespace ts.projectSystem {
163172
const configuredProject = forEach(projectService.synchronizeProjectList([]), f => f.info.projectName === corruptedConfig.path && f);
164173
assert.isTrue(configuredProject !== undefined, "should find configured project");
165174
checkProjectErrors(configuredProject, []);
175+
const projectErrors = projectService.configuredProjects[0].getAllProjectErrors();
176+
checkProjectErrorsWorker(projectErrors, []);
166177
}
167178
// break config and trigger watcher
168179
host.reloadFS([file1, file2, corruptedConfig]);
@@ -171,10 +182,14 @@ namespace ts.projectSystem {
171182
projectService.checkNumberOfProjects({ configuredProjects: 1 });
172183
const configuredProject = forEach(projectService.synchronizeProjectList([]), f => f.info.projectName === corruptedConfig.path && f);
173184
assert.isTrue(configuredProject !== undefined, "should find configured project");
174-
checkProjectErrors(configuredProject, [
185+
checkProjectErrors(configuredProject, []);
186+
const projectErrors = projectService.configuredProjects[0].getAllProjectErrors();
187+
checkProjectErrorsWorker(projectErrors, [
175188
"'{' expected."
176189
]);
190+
assert.isNotNull(projectErrors[0].file);
191+
assert.equal(projectErrors[0].file.fileName, corruptedConfig.path);
177192
}
178193
});
179194
});
180-
}
195+
}

0 commit comments

Comments
 (0)