From e78f52d246a143b6f09bb5d53967f3db1b7b8425 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 15 Mar 2019 15:03:45 -0700 Subject: [PATCH] Add more information when getValidSourceFile cant find the file in question. Log for #30180 --- src/server/session.ts | 32 ++++++++++++++----- src/services/services.ts | 2 +- .../tsserver/cachingFileSystemInformation.ts | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index 7cc3f595f8..6cf0619efd 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -659,16 +659,32 @@ namespace ts.server { } } - if (fileRequest && this.logger.hasLevel(LogLevel.verbose)) { - try { - const { file, project } = this.getFileAndProject(fileRequest); - const scriptInfo = project.getScriptInfoForNormalizedPath(file); - if (scriptInfo) { - const text = getSnapshotText(scriptInfo.getSnapshot()); - msg += `\n\nFile text of ${fileRequest.file}:${indent(text)}\n`; + if (this.logger.hasLevel(LogLevel.verbose)) { + if (fileRequest) { + try { + const { file, project } = this.getFileAndProject(fileRequest); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + if (scriptInfo) { + const text = getSnapshotText(scriptInfo.getSnapshot()); + msg += `\n\nFile text of ${fileRequest.file}:${indent(text)}\n`; + } } + catch { } // tslint:disable-line no-empty + } + + if (err.message && err.message.indexOf(`Could not find sourceFile:`) !== -1) { + msg += `\n\nProjects::\n`; + let counter = 0; + const addProjectInfo = (project: Project) => { + msg += `\nProject '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter}\n`; + msg += project.filesToString(/*writeProjectFileNames*/ true); + msg += "\n-----------------------------------------------\n"; + counter++; + }; + this.projectService.externalProjects.forEach(addProjectInfo); + this.projectService.configuredProjects.forEach(addProjectInfo); + this.projectService.inferredProjects.forEach(addProjectInfo); } - catch {} // tslint:disable-line no-empty } this.logger.msg(msg, Msg.Err); diff --git a/src/services/services.ts b/src/services/services.ts index 7f5772d148..5f0d3472a3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1158,7 +1158,7 @@ namespace ts { function getValidSourceFile(fileName: string): SourceFile { const sourceFile = program.getSourceFile(fileName); if (!sourceFile) { - throw new Error("Could not find file: '" + fileName + "'."); + throw new Error(`Could not find sourceFile: '${fileName}' in ${program && JSON.stringify(program.getSourceFiles().map(f => f.fileName))}.`); } return sourceFile; } diff --git a/src/testRunner/unittests/tsserver/cachingFileSystemInformation.ts b/src/testRunner/unittests/tsserver/cachingFileSystemInformation.ts index 26b7857347..53a1cb4e42 100644 --- a/src/testRunner/unittests/tsserver/cachingFileSystemInformation.ts +++ b/src/testRunner/unittests/tsserver/cachingFileSystemInformation.ts @@ -139,7 +139,7 @@ namespace ts.projectSystem { assert.isTrue(false, `should not find file '${imported.path}'`); } catch (e) { - assert.isTrue(e.message.indexOf(`Could not find file: '${imported.path}'.`) === 0); + assert.isTrue(e.message.indexOf(`Could not find sourceFile: '${imported.path}' in ["${root.path}"].`) === 0, `Actual: ${e.message}`); } const f2Lookups = getLocationsForModuleLookup("f2"); callsTrackingHost.verifyCalledOnEachEntryNTimes(CalledMapsWithSingleArg.fileExists, f2Lookups, 1);