Fix --strictNullChecks error with getDefaultProjectForFile (#25060)

* Fix --strictNullChecks error with getDefaultProjectForFile

* Mark methods internal
This commit is contained in:
Andy 2018-06-22 11:22:34 -07:00 committed by GitHub
parent 42fc8431f7
commit 38a60ac59b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 14 deletions

View file

@ -693,18 +693,26 @@ namespace ts.server {
}
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined {
let scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
if (ensureProject && (!scriptInfo || scriptInfo.isOrphan())) {
this.ensureProjectStructuresUptoDate();
scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
if (!scriptInfo) {
return Errors.ThrowNoProject();
}
return scriptInfo.getDefaultProject();
}
return ensureProject ? this.ensureDefaultProjectForFile(fileName) : this.tryGetDefaultProjectForFile(fileName);
}
/* @internal */
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined {
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
return scriptInfo && !scriptInfo.isOrphan() ? scriptInfo.getDefaultProject() : undefined;
}
/* @internal */
ensureDefaultProjectForFile(fileName: NormalizedPath): Project {
return this.tryGetDefaultProjectForFile(fileName) || this.doEnsureDefaultProjectForFile(fileName);
}
private doEnsureDefaultProjectForFile(fileName: NormalizedPath): Project {
this.ensureProjectStructuresUptoDate();
const scriptInfo = this.getScriptInfoForNormalizedPath(fileName);
return scriptInfo ? scriptInfo.getDefaultProject() : Errors.ThrowNoProject();
}
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string) {
this.ensureProjectStructuresUptoDate();
return this.getScriptInfo(uncheckedFileName);

View file

@ -1150,7 +1150,7 @@ namespace ts.server {
// Since this is syntactic operation, there should always be project for the file
// we wouldnt have to ensure project but rather throw if we dont get project
const file = toNormalizedPath(args.file);
const project = this.getProject(args.projectFileName) || this.projectService.getDefaultProjectForFile(file, /*ensureProject*/ false);
const project = this.getProject(args.projectFileName) || this.projectService.tryGetDefaultProjectForFile(file);
if (!project) {
return Errors.ThrowNoProject();
}
@ -1162,7 +1162,7 @@ namespace ts.server {
private getFileAndProjectWorker(uncheckedFileName: string, projectFileName: string | undefined): { file: NormalizedPath, project: Project } {
const file = toNormalizedPath(uncheckedFileName);
const project = this.getProject(projectFileName) || this.projectService.getDefaultProjectForFile(file, /*ensureProject*/ true)!; // TODO: GH#18217
const project = this.getProject(projectFileName) || this.projectService.ensureDefaultProjectForFile(file);
return { file, project };
}
@ -1461,7 +1461,7 @@ namespace ts.server {
private createCheckList(fileNames: string[], defaultProject?: Project): PendingErrorCheck[] {
return mapDefined<string, PendingErrorCheck>(fileNames, uncheckedFileName => {
const fileName = toNormalizedPath(uncheckedFileName);
const project = defaultProject || this.projectService.getDefaultProjectForFile(fileName, /*ensureProject*/ false);
const project = defaultProject || this.projectService.tryGetDefaultProjectForFile(fileName);
return project && { fileName, project };
});
}
@ -1859,7 +1859,7 @@ namespace ts.server {
const lowPriorityFiles: NormalizedPath[] = [];
const veryLowPriorityFiles: NormalizedPath[] = [];
const normalizedFileName = toNormalizedPath(fileName);
const project = this.projectService.getDefaultProjectForFile(normalizedFileName, /*ensureProject*/ true)!;
const project = this.projectService.ensureDefaultProjectForFile(normalizedFileName);
for (const fileNameInProject of fileNamesInProject) {
if (this.getCanonicalFileName(fileNameInProject) === this.getCanonicalFileName(fileName)) {
highPriorityFiles.push(fileNameInProject);

View file

@ -3097,7 +3097,7 @@ namespace ts.projectSystem {
checkProjectRootFiles(project, [file.path]);
checkProjectActualFiles(project, [file.path, libFile.path]);
assert.strictEqual(projectService.getDefaultProjectForFile(server.toNormalizedPath(file.path), /*ensureProject*/ true), project);
assert.strictEqual(projectService.ensureDefaultProjectForFile(server.toNormalizedPath(file.path)), project);
const indexOfX = file.content.indexOf("x");
assert.deepEqual(project.getLanguageService(/*ensureSynchronized*/ true).getQuickInfoAtPosition(file.path, indexOfX), {
kind: ScriptElementKind.variableElement,

View file

@ -13828,6 +13828,9 @@ declare namespace ts.server {
setCompilerOptionsForInferredProjects(projectCompilerOptions: protocol.ExternalProjectCompilerOptions, projectRootPath?: string): void;
findProject(projectName: string): Project | undefined;
getDefaultProjectForFile(fileName: NormalizedPath, ensureProject: boolean): Project | undefined;
tryGetDefaultProjectForFile(fileName: NormalizedPath): Project | undefined;
ensureDefaultProjectForFile(fileName: NormalizedPath): Project;
private doEnsureDefaultProjectForFile;
getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName: string): ScriptInfo | undefined;
private ensureProjectStructuresUptoDate;
getFormatCodeOptions(file: NormalizedPath): FormatCodeSettings;