From b7b2c333a9b2b7816a3f975cc1950e889bcffec8 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 25 Mar 2020 10:14:31 -0700 Subject: [PATCH] Handle if reading tsconfig file fails (#37563) Fixes #36862 --- src/server/editorServices.ts | 2 +- .../unittests/tsserver/configuredProjects.ts | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 7ea137c3d1b..0b4f5c6f242 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1974,7 +1974,7 @@ namespace ts.server { // Read updated contents from disk const configFilename = normalizePath(project.getConfigFilePath()); - const configFileContent = this.host.readFile(configFilename)!; // TODO: GH#18217 + const configFileContent = this.host.readFile(configFilename) || ""; const result = parseJsonText(configFilename, configFileContent); if (!result.endOfFileToken) { diff --git a/src/testRunner/unittests/tsserver/configuredProjects.ts b/src/testRunner/unittests/tsserver/configuredProjects.ts index 06bd87fa0dd..438b09eb68b 100644 --- a/src/testRunner/unittests/tsserver/configuredProjects.ts +++ b/src/testRunner/unittests/tsserver/configuredProjects.ts @@ -1233,4 +1233,27 @@ declare var console: { checkWatchedDirectories(host, watchedRecursiveDirectories, /*recursive*/ true); }); }); + + describe("unittests:: tsserver:: ConfiguredProjects:: when reading tsconfig file fails", () => { + it("should be tolerated without crashing the server", () => { + const configFile = { + path: `${tscWatch.projectRoot}/tsconfig.json`, + content: "" + }; + const file1 = { + path: `${tscWatch.projectRoot}/file1.ts`, + content: "let t = 10;" + }; + + const host = createServerHost([file1, configFile]); + const projectService = createProjectService(host); + const originalReadFile = host.readFile; + host.readFile = f => { + return f === configFile.path ? + undefined : + originalReadFile.call(host, f); + }; + projectService.openClientFile(file1.path); + }); + }); }