Skip to content

Commit a94e57f

Browse files
author
Andy Hanson
committed
Fix --strictNullChecks error with getDefaultProjectForFile
1 parent 3bab6af commit a94e57f

File tree

4 files changed

+23
-14
lines changed

4 files changed

+23
-14
lines changed

src/server/editorServices.ts

+15-9
Original file line numberDiff line numberDiff line change
@@ -693,18 +693,24 @@ namespace ts.server {
693693
}
694694

695695
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined {
696-
let scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
697-
if (ensureProject && (!scriptInfo || scriptInfo.isOrphan())) {
698-
this.ensureProjectStructuresUptoDate();
699-
scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
700-
if (!scriptInfo) {
701-
return Errors.ThrowNoProject();
702-
}
703-
return scriptInfo.getDefaultProject();
704-
}
696+
return ensureProject ? this.ensureDefaultProjectForFile(fileName) : this.tryGetDefaultProjectForFile(fileName);
697+
}
698+
699+
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined {
700+
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
705701
return scriptInfo && !scriptInfo.isOrphan() ? scriptInfo.getDefaultProject() : undefined;
706702
}
707703

704+
ensureDefaultProjectForFile(fileName: NormalizedPath): Project {
705+
return this.tryGetDefaultProjectForFile(fileName) || this.doEnsureDefaultProjectForFile(fileName);
706+
}
707+
708+
private doEnsureDefaultProjectForFile(fileName: NormalizedPath): Project {
709+
this.ensureProjectStructuresUptoDate();
710+
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
711+
return scriptInfo ? scriptInfo.getDefaultProject() : Errors.ThrowNoProject();
712+
}
713+
708714
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string) {
709715
this.ensureProjectStructuresUptoDate();
710716
return this.getScriptInfo(uncheckedFileName);

src/server/session.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@ namespace ts.server {
11501150
// Since this is syntactic operation, there should always be project for the file
11511151
// we wouldnt have to ensure project but rather throw if we dont get project
11521152
const file = toNormalizedPath(args.file);
1153-
const project = this.getProject(args.projectFileName) || this.projectService.getDefaultProjectForFile(file, /*ensureProject*/ false);
1153+
const project = this.getProject(args.projectFileName) || this.projectService.tryGetDefaultProjectForFile(file);
11541154
if (!project) {
11551155
return Errors.ThrowNoProject();
11561156
}
@@ -1162,7 +1162,7 @@ namespace ts.server {
11621162

11631163
private getFileAndProjectWorker(uncheckedFileName: string, projectFileName: string | undefined): { file: NormalizedPath, project: Project } {
11641164
const file = toNormalizedPath(uncheckedFileName);
1165-
const project = this.getProject(projectFileName) || this.projectService.getDefaultProjectForFile(file, /*ensureProject*/ true)!; // TODO: GH#18217
1165+
const project = this.getProject(projectFileName) || this.projectService.ensureDefaultProjectForFile(file);
11661166
return { file, project };
11671167
}
11681168

@@ -1454,7 +1454,7 @@ namespace ts.server {
14541454
private createCheckList(fileNames: string[], defaultProject?: Project): PendingErrorCheck[] {
14551455
return mapDefined<string, PendingErrorCheck>(fileNames, uncheckedFileName => {
14561456
const fileName = toNormalizedPath(uncheckedFileName);
1457-
const project = defaultProject || this.projectService.getDefaultProjectForFile(fileName, /*ensureProject*/ false);
1457+
const project = defaultProject || this.projectService.tryGetDefaultProjectForFile(fileName);
14581458
return project && { fileName, project };
14591459
});
14601460
}
@@ -1852,7 +1852,7 @@ namespace ts.server {
18521852
const lowPriorityFiles: NormalizedPath[] = [];
18531853
const veryLowPriorityFiles: NormalizedPath[] = [];
18541854
const normalizedFileName = toNormalizedPath(fileName);
1855-
const project = this.projectService.getDefaultProjectForFile(normalizedFileName, /*ensureProject*/ true)!;
1855+
const project = this.projectService.ensureDefaultProjectForFile(normalizedFileName);
18561856
for (const fileNameInProject of fileNamesInProject) {
18571857
if (this.getCanonicalFileName(fileNameInProject) === this.getCanonicalFileName(fileName)) {
18581858
highPriorityFiles.push(fileNameInProject);

src/testRunner/unittests/tsserverProjectSystem.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3097,7 +3097,7 @@ namespace ts.projectSystem {
30973097
checkProjectRootFiles(project, [file.path]);
30983098
checkProjectActualFiles(project, [file.path, libFile.path]);
30993099

3100-
assert.strictEqual(projectService.getDefaultProjectForFile(server.toNormalizedPath(file.path), /*ensureProject*/ true), project);
3100+
assert.strictEqual(projectService.ensureDefaultProjectForFile(server.toNormalizedPath(file.path)), project);
31013101
const indexOfX = file.content.indexOf("x");
31023102
assert.deepEqual(project.getLanguageService(/*ensureSynchronized*/ true).getQuickInfoAtPosition(file.path, indexOfX), {
31033103
kind: ScriptElementKind.variableElement,

tests/baselines/reference/api/tsserverlibrary.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -13801,6 +13801,9 @@ declare namespace ts.server {
1380113801
setCompilerOptionsForInferredProjects(projectCompilerOptions: protocol.ExternalProjectCompilerOptions, projectRootPath?: string): void;
1380213802
findProject(projectName: string): Project | undefined;
1380313803
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined;
13804+
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined;
13805+
ensureDefaultProjectForFile(fileName: NormalizedPath): Project;
13806+
private doEnsureDefaultProjectForFile;
1380413807
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string): ScriptInfo | undefined;
1380513808
private ensureProjectStructuresUptoDate;
1380613809
getFormatCodeOptions(file: NormalizedPath): FormatCodeSettings;

0 commit comments

Comments
 (0)