From 2b94d490caaba515004ffd728e4e65d99ddaaa8c Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 7 Nov 2016 14:24:37 -0800 Subject: [PATCH 1/2] return empty file watcher in case if target directory does not exist --- src/compiler/sys.ts | 3 ++- .../unittests/tsserverProjectSystem.ts | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 13bbfc2ab153f..fabc7d0632cb1 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -439,6 +439,7 @@ namespace ts { return filter(_fs.readdirSync(path), dir => fileSystemEntryExists(combinePaths(path, dir), FileSystemEntryKind.Directory)); } + const noOpFileWatcher: FileWatcher = { close: noop }; const nodeSystem: System = { args: process.argv.slice(2), newLine: _os.EOL, @@ -475,7 +476,7 @@ namespace ts { // (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643) let options: any; if (!directoryExists(directoryName)) { - return; + return noOpFileWatcher; } if (isNode4OrLater() && (process.platform === "win32" || process.platform === "darwin")) { diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index ee6139b1215c6..117b81cc08b83 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -1964,6 +1964,33 @@ namespace ts.projectSystem { projectService.checkNumberOfProjects({ configuredProjects: 1 }); checkProjectActualFiles(projectService.configuredProjects[0], [libES5.path, libES2015Promise.path, app.path]); }); + + it("should handle non-existing directories in config file", () => { + const f = { + path: "/a/src/app.ts", + content: "let x = 1;" + }; + const config = { + path: "/a/tsconfig.json", + content: JSON.stringify({ + compilerOptions: {}, + include: [ + "src/**/*", + "notexistingfolder/*" + ] + }) + }; + const host = createServerHost([f, config]); + const projectService = createProjectService(host); + projectService.openClientFile(f.path); + projectService.checkNumberOfProjects({configuredProjects: 1}); + + projectService.closeClientFile(f.path); + projectService.checkNumberOfProjects({configuredProjects: 0}); + + projectService.openClientFile(f.path); + projectService.checkNumberOfProjects({configuredProjects: 1}); + }) }); describe("prefer typings to js", () => { From 5b32add5da6d0e00a5f6ca607d1e1ae0d77c0ce5 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 7 Nov 2016 15:05:23 -0800 Subject: [PATCH 2/2] linter --- src/compiler/sys.ts | 2 +- src/harness/unittests/tsserverProjectSystem.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index fabc7d0632cb1..9cf95d6de9b92 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -439,7 +439,7 @@ namespace ts { return filter(_fs.readdirSync(path), dir => fileSystemEntryExists(combinePaths(path, dir), FileSystemEntryKind.Directory)); } - const noOpFileWatcher: FileWatcher = { close: noop }; + const noOpFileWatcher: FileWatcher = { close: noop }; const nodeSystem: System = { args: process.argv.slice(2), newLine: _os.EOL, diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts index 117b81cc08b83..c3974f037728e 100644 --- a/src/harness/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -1983,14 +1983,14 @@ namespace ts.projectSystem { const host = createServerHost([f, config]); const projectService = createProjectService(host); projectService.openClientFile(f.path); - projectService.checkNumberOfProjects({configuredProjects: 1}); + projectService.checkNumberOfProjects({ configuredProjects: 1 }); projectService.closeClientFile(f.path); - projectService.checkNumberOfProjects({configuredProjects: 0}); + projectService.checkNumberOfProjects({ configuredProjects: 0 }); projectService.openClientFile(f.path); - projectService.checkNumberOfProjects({configuredProjects: 1}); - }) + projectService.checkNumberOfProjects({ configuredProjects: 1 }); + }); }); describe("prefer typings to js", () => {