Skip to content

Commit 38a60ac

Browse files
author
Andy
authored
Fix --strictNullChecks error with getDefaultProjectForFile (#25060)
* Fix --strictNullChecks error with getDefaultProjectForFile * Mark methods internal
1 parent 42fc843 commit 38a60ac

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

src/server/editorServices.ts

+17-9
Original file line numberDiff line numberDiff line change
@@ -693,18 +693,26 @@ 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+
/* @internal */
700+
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined {
701+
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
705702
return scriptInfo && !scriptInfo.isOrphan() ? scriptInfo.getDefaultProject() : undefined;
706703
}
707704

705+
/* @internal */
706+
ensureDefaultProjectForFile(fileName: NormalizedPath): Project {
707+
return this.tryGetDefaultProjectForFile(fileName) || this.doEnsureDefaultProjectForFile(fileName);
708+
}
709+
710+
private doEnsureDefaultProjectForFile(fileName: NormalizedPath): Project {
711+
this.ensureProjectStructuresUptoDate();
712+
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
713+
return scriptInfo ? scriptInfo.getDefaultProject() : Errors.ThrowNoProject();
714+
}
715+
708716
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string) {
709717
this.ensureProjectStructuresUptoDate();
710718
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

@@ -1461,7 +1461,7 @@ namespace ts.server {
14611461
private createCheckList(fileNames: string[], defaultProject?: Project): PendingErrorCheck[] {
14621462
return mapDefined<string, PendingErrorCheck>(fileNames, uncheckedFileName => {
14631463
const fileName = toNormalizedPath(uncheckedFileName);
1464-
const project = defaultProject || this.projectService.getDefaultProjectForFile(fileName, /*ensureProject*/ false);
1464+
const project = defaultProject || this.projectService.tryGetDefaultProjectForFile(fileName);
14651465
return project && { fileName, project };
14661466
});
14671467
}
@@ -1859,7 +1859,7 @@ namespace ts.server {
18591859
const lowPriorityFiles: NormalizedPath[] = [];
18601860
const veryLowPriorityFiles: NormalizedPath[] = [];
18611861
const normalizedFileName = toNormalizedPath(fileName);
1862-
const project = this.projectService.getDefaultProjectForFile(normalizedFileName, /*ensureProject*/ true)!;
1862+
const project = this.projectService.ensureDefaultProjectForFile(normalizedFileName);
18631863
for (const fileNameInProject of fileNamesInProject) {
18641864
if (this.getCanonicalFileName(fileNameInProject) === this.getCanonicalFileName(fileName)) {
18651865
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
@@ -13828,6 +13828,9 @@ declare namespace ts.server {
1382813828
setCompilerOptionsForInferredProjects(projectCompilerOptions: protocol.ExternalProjectCompilerOptions, projectRootPath?: string): void;
1382913829
findProject(projectName: string): Project | undefined;
1383013830
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined;
13831+
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined;
13832+
ensureDefaultProjectForFile(fileName: NormalizedPath): Project;
13833+
private doEnsureDefaultProjectForFile;
1383113834
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string): ScriptInfo | undefined;
1383213835
private ensureProjectStructuresUptoDate;
1383313836
getFormatCodeOptions(file: NormalizedPath): FormatCodeSettings;

0 commit comments

Comments
 (0)