From a11d0eb172da82de5923fcf3598d9d86b58cd667 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Wed, 20 Apr 2022 10:07:47 -0700 Subject: [PATCH] Address more PR comments --- src/server/tsconfig.json | 2 +- src/testRunner/unittests/tsserver/webServer.ts | 1 + src/tsserver/nodeServer.ts | 8 ++++---- src/tsserver/server.ts | 14 +++++++------- src/tsserver/webServer.ts | 7 ++----- src/vfs/virtualFileSystemWithWatch.ts | 10 +++++----- src/webServer/webServer.ts | 4 ++-- 7 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index ab43017a0ed..d25b6c1b1dd 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -12,7 +12,7 @@ { "path": "../compiler" }, { "path": "../jsTyping" }, { "path": "../services" }, - { "path": "../vfs", "prepend": true } + { "path": "../vfs" } ], "files": [ "types.ts", diff --git a/src/testRunner/unittests/tsserver/webServer.ts b/src/testRunner/unittests/tsserver/webServer.ts index 1891596ffb0..db8d78b0601 100644 --- a/src/testRunner/unittests/tsserver/webServer.ts +++ b/src/testRunner/unittests/tsserver/webServer.ts @@ -3,6 +3,7 @@ namespace ts.projectSystem { class TestWorkerSession extends server.WorkerSession { constructor(host: server.ServerHost, webHost: server.HostWithWriteMessage, options: Partial, logger: server.Logger) { super( + host, host, webHost, { diff --git a/src/tsserver/nodeServer.ts b/src/tsserver/nodeServer.ts index 43fe0b77fff..7de98714a3d 100644 --- a/src/tsserver/nodeServer.ts +++ b/src/tsserver/nodeServer.ts @@ -383,7 +383,7 @@ namespace ts.server { return eventPort !== undefined && !isNaN(eventPort) ? eventPort : undefined; } - function startNodeSession(options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, fs: ServerHost) { + function startNodeSession(options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, fshost: ServerHost) { const childProcess: { fork(modulePath: string, args: string[], options?: { execArgv: string[], env?: MapLike }): NodeChildProcess; } = require("child_process"); @@ -680,7 +680,7 @@ namespace ts.server { this.event(body, eventName); }; - const host = fs; // sys as ServerHost; + const host = sys as ServerHost; const typingsInstaller = disableAutomaticTypingAcquisition ? undefined @@ -688,7 +688,7 @@ namespace ts.server { super({ host, - fshost: host, + fshost, cancellationToken, ...options, typingsInstaller: typingsInstaller || nullTypingsInstaller, @@ -789,7 +789,7 @@ namespace ts.server { const eventPort: number | undefined = parseEventPort(findArgument("--eventPort")); const typingSafeListLocation = findArgument(Arguments.TypingSafeListLocation)!; // TODO: GH#18217 - const typesMapLocation = findArgument(Arguments.TypesMapLocation) || combinePaths(getDirectoryPath(fs.getExecutingFilePath()), "typesMap.json"); + const typesMapLocation = findArgument(Arguments.TypesMapLocation) || combinePaths(getDirectoryPath(fshost.getExecutingFilePath()), "typesMap.json"); const npmLocation = findArgument(Arguments.NpmLocation); const validateDefaultNpmLocation = hasArgument(Arguments.ValidateDefaultNpmLocation); const disableAutomaticTypingAcquisition = hasArgument("--disableAutomaticTypingAcquisition"); diff --git a/src/tsserver/server.ts b/src/tsserver/server.ts index a72cb263055..3256b88c021 100644 --- a/src/tsserver/server.ts +++ b/src/tsserver/server.ts @@ -30,14 +30,15 @@ namespace ts.server { unknownServerMode?: string; startSession: (option: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, fs: ServerHost) => void; } - function start({ args, logger, cancellationToken, serverMode, unknownServerMode, startSession: startServer }: StartInput, platform: string, fs: ServerHost) { + function start({ args, logger, cancellationToken, serverMode, unknownServerMode, startSession: startServer }: StartInput, platform: string) { const syntaxOnly = hasArgument("--syntaxOnly"); + const vfs = hasArgument("--vfs"); logger.info(`Starting TS Server`); logger.info(`Version: ${version}`); logger.info(`Arguments: ${args.join(" ")}`); logger.info(`Platform: ${platform} NodeVersion: ${getNodeMajorVersion()} CaseSensitive: ${sys.useCaseSensitiveFileNames}`); - logger.info(`ServerMode: ${serverMode} syntaxOnly: ${syntaxOnly} hasUnknownServerMode: ${unknownServerMode}`); + logger.info(`ServerMode: ${serverMode} syntaxOnly: ${syntaxOnly} hasUnknownServerMode: ${unknownServerMode} vfs: ${vfs}`); setStackTraceLimit(); @@ -57,6 +58,7 @@ namespace ts.server { console.warn = (...args) => logger.msg(args.length === 1 ? args[0] : args.join(", "), Msg.Err); console.error = (...args) => logger.msg(args.length === 1 ? args[0] : args.join(", "), Msg.Err); + const fshost = vfs ? TestFSWithWatch.createVirtualServerHost([]) : sys as ServerHost; startServer( { globalPlugins: findArgumentStringArray("--globalPlugins"), @@ -71,23 +73,21 @@ namespace ts.server { }, logger, cancellationToken, - fs + fshost ); } setStackTraceLimit(); - // TODO: Not sure this is right - const fs = findArgument("vfs") ? TestFSWithWatch.createVirtualServerHost([]) : sys as ServerHost; // Cannot check process var directory in webworker so has to be typeof check here if (typeof process !== "undefined") { - start(initializeNodeSystem(), require("os").platform(), fs); + start(initializeNodeSystem(), require("os").platform()); } else { // Get args from first message const listener = (e: any) => { removeEventListener("message", listener); const args = e.data; - start(initializeWebSystem(args), "web", fs); + start(initializeWebSystem(args), "web"); }; addEventListener("message", listener); } diff --git a/src/tsserver/webServer.ts b/src/tsserver/webServer.ts index 3093819f452..4a6512318b4 100644 --- a/src/tsserver/webServer.ts +++ b/src/tsserver/webServer.ts @@ -96,13 +96,10 @@ namespace ts.server { return [seconds, nanoseconds]; } - // TODO: Maybe should leave as ServerHost cast below and declare fs: System - // TODO: host is probably still a better name - function startWebSession(options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, _fs_TODO: ServerHost) { + function startWebSession(options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, fshost: ServerHost) { class WorkerSession extends server.WorkerSession { constructor() { - // TODO: Not really sure this is the way to do it - super(sys as ServerHost, { writeMessage }, options, logger, cancellationToken, hrtime); + super(sys as ServerHost, fshost, { writeMessage }, options, logger, cancellationToken, hrtime); } exit() { diff --git a/src/vfs/virtualFileSystemWithWatch.ts b/src/vfs/virtualFileSystemWithWatch.ts index 12add93babf..4ee2fcecaf1 100644 --- a/src/vfs/virtualFileSystemWithWatch.ts +++ b/src/vfs/virtualFileSystemWithWatch.ts @@ -337,7 +337,7 @@ namespace ts.TestFSWithWatch { } if (options && options.invokeFileDeleteCreateAsPartInsteadOfChange) { - this.removeFileOrFolder(currentEntry, false); + this.removeFileOrFolder(currentEntry, /*isRemoveableLeafFolder*/ false); this.ensureFileOrFolder({ path: filePath, content }); } else { @@ -363,7 +363,7 @@ namespace ts.TestFSWithWatch { Debug.assert(!!file); // Only remove the file - this.removeFileOrFolder(file, false, /*isRenaming*/ true); + this.removeFileOrFolder(file, /*isRemoveableLeafFolder*/ false, /*isRenaming*/ true); // Add updated folder with new folder name const newFullPath = getNormalizedAbsolutePath(newFileName, this.currentDirectory); @@ -383,7 +383,7 @@ namespace ts.TestFSWithWatch { Debug.assert(!!folder); // Only remove the folder - this.removeFileOrFolder(folder, false, /*isRenaming*/ true); + this.removeFileOrFolder(folder, /*isRemoveableLeafFolder*/ false, /*isRenaming*/ true); // Add updated folder with new folder name const newFullPath = getNormalizedAbsolutePath(newFolderName, this.currentDirectory); @@ -514,11 +514,11 @@ namespace ts.TestFSWithWatch { this.deleteFolder(fsEntry.fullPath, recursive); } else { - this.removeFileOrFolder(fsEntry, false); + this.removeFileOrFolder(fsEntry, /*isRemoveableLeafFolder*/ false); } }); } - this.removeFileOrFolder(currentEntry, false); + this.removeFileOrFolder(currentEntry, /*isRemoveableLeafFolder*/ false); } private watchFileWorker(fileName: string, cb: FileWatcherCallback, pollingInterval: PollingInterval) { diff --git a/src/webServer/webServer.ts b/src/webServer/webServer.ts index eb50071d0dd..5f8e8a75b82 100644 --- a/src/webServer/webServer.ts +++ b/src/webServer/webServer.ts @@ -178,10 +178,10 @@ namespace ts.server { serverMode: SessionOptions["serverMode"]; } export class WorkerSession extends Session<{}> { - constructor(host: ServerHost, private webHost: HostWithWriteMessage, options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, hrtime: SessionOptions["hrtime"]) { + constructor(host: ServerHost, fshost: ServerHost, private webHost: HostWithWriteMessage, options: StartSessionOptions, logger: Logger, cancellationToken: ServerCancellationToken, hrtime: SessionOptions["hrtime"]) { super({ host, - fshost: undefined, // TODO: Provide this? Check Sheetal's comments. + fshost, cancellationToken, ...options, typingsInstaller: nullTypingsInstaller,