Always generate configFileDiag if file is going to be added to configured project (#37443)

Fixes #30623
This commit is contained in:
Sheetal Nandi 2020-03-18 10:39:25 -07:00 committed by GitHub
parent 0aa2e2783c
commit 2df421b067
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 2 deletions

View File

@ -3017,6 +3017,13 @@ namespace ts.server {
// At this point if file is part of any any configured or external project, then it would be present in the containing projects
// So if it still doesnt have any containing projects, it needs to be part of inferred project
if (info.isOrphan()) {
// Even though this info did not belong to any of the configured projects, send the config file diag
if (isArray(retainProjects)) {
retainProjects.forEach(project => this.sendConfigFileDiagEvent(project, info.fileName));
}
else if (retainProjects) {
this.sendConfigFileDiagEvent(retainProjects, info.fileName);
}
Debug.assert(this.openFiles.has(info.path));
this.assignOrphanScriptInfoToInferredProject(info, this.openFiles.get(info.path));
}

View File

@ -608,6 +608,10 @@ declare module '@custom/plugin' {
path: "/a/b/test.ts",
content: "let x = 10"
};
const file3: File = {
path: "/a/b/test2.ts",
content: "let xy = 10"
};
const configFile: File = {
path: "/a/b/tsconfig.json",
content: `{
@ -618,9 +622,20 @@ declare module '@custom/plugin' {
"files": ["app.ts"]
}`
};
const serverEventManager = new TestServerEventManager([file, file2, libFile, configFile]);
const serverEventManager = new TestServerEventManager([file, file2, file3, libFile, configFile]);
openFilesForSession([file2], serverEventManager.session);
serverEventManager.checkSingleConfigFileDiagEvent(configFile.path, file2.path, [
getUnknownCompilerOptionDiagnostic(configFile, "foo"),
getUnknownCompilerOptionDiagnostic(configFile, "allowJS", "allowJs")
]);
openFilesForSession([file], serverEventManager.session);
// We generate only if project is created when opening file from the project
serverEventManager.hasZeroEvent("configFileDiag");
openFilesForSession([file3], serverEventManager.session);
serverEventManager.checkSingleConfigFileDiagEvent(configFile.path, file3.path, [
getUnknownCompilerOptionDiagnostic(configFile, "foo"),
getUnknownCompilerOptionDiagnostic(configFile, "allowJS", "allowJs")
]);
});
it("are not generated when the config file has errors but suppressDiagnosticEvents is true", () => {
@ -651,6 +666,10 @@ declare module '@custom/plugin' {
path: "/a/b/test.ts",
content: "let x = 10"
};
const file3: File = {
path: "/a/b/test2.ts",
content: "let xy = 10"
};
const configFile: File = {
path: "/a/b/tsconfig.json",
content: `{
@ -658,9 +677,14 @@ declare module '@custom/plugin' {
}`
};
const serverEventManager = new TestServerEventManager([file, file2, libFile, configFile]);
const serverEventManager = new TestServerEventManager([file, file2, file3, libFile, configFile]);
openFilesForSession([file2], serverEventManager.session);
serverEventManager.checkSingleConfigFileDiagEvent(configFile.path, file2.path, emptyArray);
openFilesForSession([file], serverEventManager.session);
// We generate only if project is created when opening file from the project
serverEventManager.hasZeroEvent("configFileDiag");
openFilesForSession([file3], serverEventManager.session);
serverEventManager.checkSingleConfigFileDiagEvent(configFile.path, file3.path, emptyArray);
});
it("contains the project reference errors", () => {