Skip to content

Commit c0bcf8f

Browse files
committed
release cached tree in compilation settings change
1 parent de37f35 commit c0bcf8f

5 files changed

Lines changed: 25 additions & 6 deletions

File tree

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,5 +1346,21 @@ namespace ts {
13461346
projectService.setCompilerOptionsForInferredProjects({ moduleResolution: ModuleResolutionKind.Classic });
13471347
checkNumberOfProjects(projectService, { inferredProjects: 1 });
13481348
});
1349+
1350+
it("syntax tree cache handles changes in project settings", () => {
1351+
const file1 = {
1352+
path: "/a/b/app.ts",
1353+
content: "{x: 1}"
1354+
};
1355+
const host = createServerHost([file1]);
1356+
const projectService = new server.ProjectService(host, nullLogger, nullCancellationToken, /*useSingleInferredProject*/ true);
1357+
projectService.setCompilerOptionsForInferredProjects({ target: ScriptTarget.ES5, allowJs: false });
1358+
projectService.openClientFile(file1.path);
1359+
projectService.inferredProjects[0].getLanguageService(/*ensureSynchronized*/ false).getOutliningSpans(file1.path);
1360+
projectService.setCompilerOptionsForInferredProjects({ target: ScriptTarget.ES5, allowJs: true });
1361+
projectService.getScriptInfo(file1.path).editContent(0, 0, " ");
1362+
projectService.inferredProjects[0].getLanguageService(/*ensureSynchronized*/ false).getOutliningSpans(file1.path);
1363+
projectService.closeClientFile(file1.path);
1364+
});
13491365
});
13501366
}

src/server/scriptInfo.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ namespace ts.server {
8181
}
8282

8383
getDefaultProject() {
84+
if (this.containingProjects.length === 0) {
85+
throw Errors.NoProject;
86+
}
8487
Debug.assert(this.containingProjects.length !== 0);
8588
return this.containingProjects[0];
8689
}

src/server/session.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,6 @@ namespace ts.server {
146146
export const CompilerOptionsForInferredProjects = "compilerOptionsForInferredProjects";
147147
}
148148

149-
namespace Errors {
150-
export const NoProject = new Error("No Project.");
151-
export const ProjectLanguageServiceDisabled = new Error("The project's language service is disabled.");
152-
}
153-
154149
export class Session {
155150
protected projectService: ProjectService;
156151
private errorTimer: any; /*NodeJS.Timer | number*/

src/server/utilities.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ namespace ts.server {
2929
export type Types = Err | Info | Perf;
3030
}
3131

32+
export namespace Errors {
33+
export const NoProject = new Error("No Project.");
34+
export const ProjectLanguageServiceDisabled = new Error("The project's language service is disabled.");
35+
}
36+
3237
export function getDefaultFormatCodeSettings(host: ServerHost): FormatCodeSettings {
3338
return {
3439
indentSize: 4,

src/services/services.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3284,7 +3284,7 @@ namespace ts {
32843284
const scriptKind = ts.getScriptKind(fileName, host);
32853285
const compilerOptions = host.getCompilationSettings();
32863286
let sourceFile: SourceFile;
3287-
if (currentFileName !== fileName) {
3287+
if (currentFileName !== fileName || (currentCompilerOptions && !mapIsEqualTo(compilerOptions, currentCompilerOptions))) {
32883288
// Release the current document
32893289
if (currentFileName) {
32903290
documentRegistry.releaseDocument(currentFileName, currentCompilerOptions);

0 commit comments

Comments
 (0)