From d9d33e148ee68ed7749b1745706ed76ceaf9a604 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Mon, 22 Aug 2022 09:11:57 -0700 Subject: [PATCH] Initial scribbles using vscode-sync-api-client --- src/tsserver/webServer.ts | 57 ++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/src/tsserver/webServer.ts b/src/tsserver/webServer.ts index 71beb5a8db9..7de81c917fe 100644 --- a/src/tsserver/webServer.ts +++ b/src/tsserver/webServer.ts @@ -3,6 +3,7 @@ /// namespace ts.server { + // declare const lol: import("vscode-sync-api-client").ApiClient const nullLogger: Logger = { close: noop, hasLevel: returnFalse, @@ -23,6 +24,8 @@ namespace ts.server { return LanguageServiceMode.PartialSemantic; case "syntactic": return LanguageServiceMode.Syntactic; + case "semantic": + if (hasArgument("--vfs")) return LanguageServiceMode.Semantic; default: return mode; } @@ -56,7 +59,7 @@ namespace ts.server { logger, cancellationToken: nullCancellationToken, // Webserver defaults to partial semantic mode - serverMode: serverMode ?? LanguageServiceMode.PartialSemantic, + serverMode: serverMode ?? (hasArgument("--vfs") ? LanguageServiceMode.Semantic : LanguageServiceMode.PartialSemantic), unknownServerMode, startSession: startWebSession }; @@ -71,25 +74,43 @@ namespace ts.server { postMessage(s); } + /** + * This is called from initializeWebSystem, + * which is indirectly called from the toplevel code in tsserver/server that registers a message. + * When *something* fires the message, it calls + * which calls initializeWebSystem above, but it doesn't need to change much + * first create a webhost, which will need to alternately create a vscode-sync-api-host or SOMETHING + * then createWebSystem in webserver/webserver.ts, with a thunk for finding arguments (doesn't work until after setSys) + * createWebSystem probably needs *some* changes, but not many -- probably not enough to fork it, + * but MAYBE since it is a lot of work built around a minimal webHost + */ function createWebSystem(args: string[]) { Debug.assert(ts.sys === undefined); - const webHost: WebHost = { - readFile: webPath => { - const request = new XMLHttpRequest(); - request.open("GET", webPath, /* asynchronous */ false); - request.send(); - return request.status === 200 ? request.responseText : undefined; - }, - fileExists: webPath => { - const request = new XMLHttpRequest(); - request.open("HEAD", webPath, /* asynchronous */ false); - request.send(); - return request.status === 200; - }, - writeMessage, - }; - // Do this after sys has been set as findArguments is going to work only then - const sys = server.createWebSystem(webHost, args, () => findArgument("--executingFilePath") || location + ""); + let sys: ServerHost; + // TODO: Actually copy this from the old PR + if (args.includes("--vfs")) { + sys = {} as any + // TODO: maybe createWebSystem could still work + } + else { + const webHost: WebHost = { + readFile: webPath => { + const request = new XMLHttpRequest(); + request.open("GET", webPath, /* asynchronous */ false); + request.send(); + return request.status === 200 ? request.responseText : undefined; + }, + fileExists: webPath => { + const request = new XMLHttpRequest(); + request.open("HEAD", webPath, /* asynchronous */ false); + request.send(); + return request.status === 200; + }, + writeMessage, + }; + // Do this after sys has been set as findArguments is going to work only then + sys = server.createWebSystem(webHost, args, () => findArgument("--executingFilePath") || location + ""); + } setSys(sys); const localeStr = findArgument("--locale"); if (localeStr) {