Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/src/main.ts')
| -rw-r--r-- | editors/code/src/main.ts | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 54e0c16e5e..e76b657c1b 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts @@ -2,8 +2,7 @@ import * as vscode from "vscode"; import * as lc from "vscode-languageclient/node"; import * as commands from "./commands"; -import { CommandFactory, Ctx, Workspace } from "./ctx"; -import { isRustDocument } from "./util"; +import { CommandFactory, Ctx, fetchWorkspace } from "./ctx"; import { activateTaskProvider } from "./tasks"; import { setContextValue } from "./util"; @@ -31,28 +30,7 @@ export async function activate( .then(() => {}, console.error); } - // We only support local folders, not eg. Live Share (`vlsl:` scheme), so don't activate if - // only those are in use. - // (r-a still somewhat works with Live Share, because commands are tunneled to the host) - const folders = (vscode.workspace.workspaceFolders || []).filter( - (folder) => folder.uri.scheme === "file" - ); - const rustDocuments = vscode.workspace.textDocuments.filter((document) => - isRustDocument(document) - ); - - // FIXME: This can change over time - const workspace: Workspace = - folders.length === 0 - ? rustDocuments.length === 0 - ? { kind: "Empty" } - : { - kind: "Detached Files", - files: rustDocuments, - } - : { kind: "Workspace Folder" }; - - const ctx = new Ctx(context, createCommands(), workspace); + const ctx = new Ctx(context, createCommands(), fetchWorkspace()); // VS Code doesn't show a notification when an extension fails to activate // so we do it ourselves. const api = await activateServer(ctx).catch((err) => { @@ -70,6 +48,11 @@ async function activateServer(ctx: Ctx): Promise<RustAnalyzerExtensionApi> { ctx.pushExtCleanup(activateTaskProvider(ctx.config)); } + vscode.workspace.onDidChangeWorkspaceFolders( + async (_) => ctx.onWorkspaceFolderChanges(), + null, + ctx.subscriptions + ); vscode.workspace.onDidChangeConfiguration( async (_) => { await ctx.client?.sendNotification("workspace/didChangeConfiguration", { @@ -80,7 +63,7 @@ async function activateServer(ctx: Ctx): Promise<RustAnalyzerExtensionApi> { ctx.subscriptions ); - await ctx.activate(); + await ctx.start(); return ctx; } @@ -93,27 +76,25 @@ function createCommands(): Record<string, CommandFactory> { reload: { enabled: (ctx) => async () => { void vscode.window.showInformationMessage("Reloading rust-analyzer..."); - // FIXME: We should re-use the client, that is ctx.deactivate() if none of the configs have changed - await ctx.stop(); - await ctx.activate(); + await ctx.restart(); }, disabled: (ctx) => async () => { void vscode.window.showInformationMessage("Reloading rust-analyzer..."); - await ctx.activate(); + await ctx.start(); }, }, startServer: { enabled: (ctx) => async () => { - await ctx.activate(); + await ctx.start(); }, disabled: (ctx) => async () => { - await ctx.activate(); + await ctx.start(); }, }, stopServer: { enabled: (ctx) => async () => { // FIXME: We should re-use the client, that is ctx.deactivate() if none of the configs have changed - await ctx.stop(); + await ctx.stopAndDispose(); ctx.setServerStatus({ health: "stopped", }); |