Skip to content

Commit 399f497

Browse files
committed
Unify getProjects for compileOnSave and others like (navigation etc)
1 parent 94033f2 commit 399f497

File tree

1 file changed

+11
-19
lines changed

1 file changed

+11
-19
lines changed

src/server/session.ts

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,7 +1106,7 @@ namespace ts.server {
11061106
return project.getLanguageService().getRenameInfo(file, position);
11071107
}
11081108

1109-
private getProjects(args: protocol.FileRequestArgs): Projects {
1109+
private getProjects(args: protocol.FileRequestArgs, getScriptInfoEnsuringProjectsUptoDate?: boolean, ignoreNoProjectError?: boolean): Projects {
11101110
let projects: ReadonlyArray<Project> | undefined;
11111111
let symLinkedProjects: MultiMap<Project> | undefined;
11121112
if (args.projectFileName) {
@@ -1116,13 +1116,18 @@ namespace ts.server {
11161116
}
11171117
}
11181118
else {
1119-
const scriptInfo = this.projectService.getScriptInfo(args.file)!;
1119+
const scriptInfo = getScriptInfoEnsuringProjectsUptoDate ?
1120+
this.projectService.getScriptInfoEnsuringProjectsUptoDate(args.file) :
1121+
this.projectService.getScriptInfo(args.file);
1122+
if (!scriptInfo) {
1123+
return ignoreNoProjectError ? emptyArray : Errors.ThrowNoProject();
1124+
}
11201125
projects = scriptInfo.containingProjects;
11211126
symLinkedProjects = this.projectService.getSymlinkedProjects(scriptInfo);
11221127
}
11231128
// filter handles case when 'projects' is undefined
11241129
projects = filter(projects, p => p.languageServiceEnabled && !p.isOrphan());
1125-
if ((!projects || !projects.length) && !symLinkedProjects) {
1130+
if (!ignoreNoProjectError && (!projects || !projects.length) && !symLinkedProjects) {
11261131
return Errors.ThrowNoProject();
11271132
}
11281133
return symLinkedProjects ? { projects: projects!, symLinkedProjects } : projects!; // TODO: GH#18217
@@ -1465,29 +1470,16 @@ namespace ts.server {
14651470
}
14661471

14671472
private getCompileOnSaveAffectedFileList(args: protocol.FileRequestArgs): ReadonlyArray<protocol.CompileOnSaveAffectedFileListSingleProject> {
1468-
let info: ScriptInfo | undefined;
1469-
let project: Project | undefined;
1470-
if (args.projectFileName) {
1471-
// Do not update all projects if we are looking for specific project to compile on save
1472-
project = this.projectService.findProject(args.projectFileName)!;
1473-
if (project.dirty) project.updateGraph();
1474-
info = this.projectService.getScriptInfo(args.file);
1475-
}
1476-
else {
1477-
info = this.projectService.getScriptInfoEnsuringProjectsUptoDate(args.file);
1478-
}
1479-
1473+
const projects = this.getProjects(args, /*getScriptInfoEnsuringProjectsUptoDate*/ true, /*ignoreNoProjectError*/ true);
1474+
const info = this.projectService.getScriptInfo(args.file);
14801475
if (!info) {
14811476
return emptyArray;
14821477
}
14831478

1484-
// if specified a project, we only return affected file list in this project
1485-
const projects = args.projectFileName ? [project!] : info.containingProjects;
1486-
const symLinkedProjects = !args.projectFileName && this.projectService.getSymlinkedProjects(info);
14871479
return combineProjectOutput(
14881480
info,
14891481
path => this.projectService.getScriptInfoForPath(path)!,
1490-
symLinkedProjects ? { projects, symLinkedProjects } : projects,
1482+
projects,
14911483
(project, info) => {
14921484
let result: protocol.CompileOnSaveAffectedFileListSingleProject | undefined;
14931485
if (project.compileOnSaveEnabled && project.languageServiceEnabled && !project.isOrphan() && !project.getCompilationSettings().noEmit) {

0 commit comments

Comments
 (0)