From 32e47956249a05faf0dd9b5f1adead9ad95eb77a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Tue, 14 Jun 2022 11:02:16 -0700 Subject: [PATCH] Address remaining comments --- src/harness/virtualFileSystemWithWatch.ts | 2 +- .../unittests/tsserver/updateFileSystem.ts | 40 ++++++++++--------- .../unittests/tsserver/webServer.ts | 2 +- src/tsserver/webServer.ts | 8 ++-- src/vfs/virtualFileSystemWithWatch.ts | 4 -- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/harness/virtualFileSystemWithWatch.ts b/src/harness/virtualFileSystemWithWatch.ts index 680e67aa799..2df81bbefbe 100644 --- a/src/harness/virtualFileSystemWithWatch.ts +++ b/src/harness/virtualFileSystemWithWatch.ts @@ -507,7 +507,7 @@ interface Array { length: number; [n: number]: T; }` throw new Error(this.exitMessage); } - override getEnvironmentVariable(name: string) { + getEnvironmentVariable(name: string) { return this.environmentVariables && this.environmentVariables.get(name) || ""; } } diff --git a/src/testRunner/unittests/tsserver/updateFileSystem.ts b/src/testRunner/unittests/tsserver/updateFileSystem.ts index db9c4b0f485..cf473b95594 100644 --- a/src/testRunner/unittests/tsserver/updateFileSystem.ts +++ b/src/testRunner/unittests/tsserver/updateFileSystem.ts @@ -29,14 +29,28 @@ namespace ts.projectSystem { return `// some copy right notice ${file.fileContent}`; } - function baselineFileSystem(scenario: string, subScenario: string, requests: [string, (() => void) | Partial][], host: TestServerHost, fshost: VirtualFS.VirtualServerHost, session: TestSession) { + function verifyTsc( + scenario: string, + subScenario: string, + requests: [string, ((host: TestServerHost, fshost: VirtualFS.VirtualServerHost) => void) | Partial][], + ) { + const host = VirtualFS.createServerHost({ executingFilePath: "/host/tsc.js" }); + const fshost = VirtualFS.createVirtualServerHost({ executingFilePath: "/fshost/tsc.js" }); + const session = createSession(host, { fshost, logger: createLoggerWithInMemoryLogs(), canUseEvents: true }); const history: string[] = []; + VirtualFS.createWatcher(fshost.fsWatches, "/host/b/app.ts" as Path, { + cb: (_, relativeFileName) => { + assert.fail("The watcher for /host/b/app.ts should not be called at all. Called with " + relativeFileName); + }, + directoryName: "/host/b", + inode: undefined, + }); let prev = VirtualFS.snap(fshost); let prev2 = VirtualFS.snap(host); for (const [name, request] of requests) { if (typeof request === "function") { - request(); + request(host, fshost); } else { session.executeCommandSeq(request); @@ -58,10 +72,7 @@ ${file.fileContent}`; } it("with updateFileSystem request", () => { - const host = VirtualFS.createServerHost({ executingFilePath: "/host/tsc.js" }); - const fshost = VirtualFS.createVirtualServerHost({ executingFilePath: "/fshost/tsc.js" }); - const session = createSession(host, { fshost, logger: createLoggerWithInMemoryLogs(), canUseEvents: true }); - const requests: [string, (() => void) | Partial][] = [ + const requests: [string, ((host: TestServerHost, fshost: VirtualFS.VirtualServerHost) => void) | Partial][] = [ ["Initial updateFileSystem", { command: protocol.CommandTypes.UpdateFileSystem, arguments:{ @@ -100,19 +111,19 @@ ${file.fileContent}`; deleted: [], }, }], - ["ensure /host/app.ts exists", () => host.ensureFileOrFolder({ + ["ensure /host/app.ts exists", (host) => host.ensureFileOrFolder({ path: "/host/b/app.ts", content: 'console.log("hello")' })], - ["modify /host/app.ts", () => host.modifyFile( + ["modify /host/app.ts", (host) => host.modifyFile( "/host/b/app.ts", "console.log('goodbye')" )], - ["ensure /fshost/file4.ts exists", () => fshost.ensureFileOrFolder({ + ["ensure /fshost/file4.ts exists", (_, fshost) => fshost.ensureFileOrFolder({ path:"/fshost/b/file4.ts", content: "console.log('file4 exists')", })], - ["modify /fshost/file4", () => fshost.modifyFile( + ["modify /fshost/file4", (_, fshost) => fshost.modifyFile( "/fshost/b/file4.ts", "console.log('file4 modified')" )], @@ -129,17 +140,10 @@ ${file.fileContent}`; arguments: { file: app.file } }], ]; - VirtualFS.createWatcher(fshost.fsWatches, "/host/b/app.ts" as Path, { - cb: (_, relativeFileName) => { - assert.fail("The watcher for /host/b/app.ts should not be called at all. Called with " + relativeFileName); - }, - directoryName: "/host/b", - inode: undefined, - }); const scenario = "updateFileSystem"; const subScenario = "open and close files"; - baselineFileSystem(scenario, subScenario, requests, host, fshost, session); + verifyTsc(scenario, subScenario, requests); }); }); } diff --git a/src/testRunner/unittests/tsserver/webServer.ts b/src/testRunner/unittests/tsserver/webServer.ts index b2acf51154a..e01e2a4721c 100644 --- a/src/testRunner/unittests/tsserver/webServer.ts +++ b/src/testRunner/unittests/tsserver/webServer.ts @@ -42,7 +42,7 @@ namespace ts.projectSystem { if (isVfs) { serverMode = LanguageServiceMode.Semantic; fshost = VirtualFS.createVirtualServerHost({ executingFilePath: "/a/lib/tsc.js" }); - (fshost).ensureFileOrFolder(libFile); + fshost.ensureFileOrFolder(libFile); } const logger = logLevel !== undefined ? new server.MainProcessLogger(logLevel, webHost) : nullLogger(); const session = new TestWorkerSession(webSys, fshost, webHost, { serverMode }, logger); diff --git a/src/tsserver/webServer.ts b/src/tsserver/webServer.ts index da50aea5f1c..3e566e2eb12 100644 --- a/src/tsserver/webServer.ts +++ b/src/tsserver/webServer.ts @@ -16,7 +16,6 @@ namespace ts.server { }; function parseServerMode(): LanguageServiceMode | string | undefined { - if (hasArgument("--vfs")) return LanguageServiceMode.Semantic; const mode = findArgument("--serverMode"); if (!mode) return undefined; switch (mode.toLowerCase()) { @@ -24,6 +23,9 @@ namespace ts.server { return LanguageServiceMode.PartialSemantic; case "syntactic": return LanguageServiceMode.Syntactic; + case "semantic": + if (hasArgument("--vfs")) return LanguageServiceMode.Semantic; + // fallthrough default: return mode; } @@ -56,8 +58,8 @@ namespace ts.server { args, logger, cancellationToken: nullCancellationToken, - // Webserver defaults to partial semantic mode - serverMode: serverMode ?? LanguageServiceMode.PartialSemantic, + // Webserver defaults to partial semantic mode unless VFS is turned on + serverMode: serverMode ?? (hasArgument("--vfs") ? LanguageServiceMode.Semantic : LanguageServiceMode.PartialSemantic), unknownServerMode, startSession: startWebSession }; diff --git a/src/vfs/virtualFileSystemWithWatch.ts b/src/vfs/virtualFileSystemWithWatch.ts index 4f71f3cb466..72a5fb0d353 100644 --- a/src/vfs/virtualFileSystemWithWatch.ts +++ b/src/vfs/virtualFileSystemWithWatch.ts @@ -649,10 +649,6 @@ namespace ts.VirtualFS { baseline.push(""); return baseline; } - - getEnvironmentVariable(_name: string) { - return ""; - } } function serializeTestFsWatcher({ directoryName, inode }: VirtualFsWatcher) {