Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--editors/code/package.json11
-rw-r--r--editors/code/src/client.ts8
-rw-r--r--editors/code/src/ctx.ts2
-rw-r--r--editors/code/src/main.ts7
4 files changed, 26 insertions, 2 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index da4bac5ad8..10558e8c01 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -60,6 +60,7 @@
"onCommand:rust-analyzer.analyzerStatus",
"onCommand:rust-analyzer.memoryUsage",
"onCommand:rust-analyzer.reloadWorkspace",
+ "onCommand:rust-analyzer.startServer",
"workspaceContains:*/Cargo.toml",
"workspaceContains:*/rust-project.json"
],
@@ -192,6 +193,16 @@
"category": "rust-analyzer"
},
{
+ "command": "rust-analyzer.startServer",
+ "title": "Start server",
+ "category": "rust-analyzer"
+ },
+ {
+ "command": "rust-analyzer.stopServer",
+ "title": "Stop server",
+ "category": "rust-analyzer"
+ },
+ {
"command": "rust-analyzer.onEnter",
"title": "Enhanced enter key",
"category": "rust-analyzer"
diff --git a/editors/code/src/client.ts b/editors/code/src/client.ts
index 3408a2ee84..fb667619c8 100644
--- a/editors/code/src/client.ts
+++ b/editors/code/src/client.ts
@@ -76,6 +76,14 @@ export async function createClient(
outputChannel,
middleware: {
workspace: {
+ // HACK: This is a workaround, when the client has been disposed, VSCode
+ // continues to emit events to the client and the default one for this event
+ // attempt to restart the client for no reason
+ async didChangeWatchedFile(event, next) {
+ if (client.isRunning()) {
+ await next(event);
+ }
+ },
async configuration(
params: lc.ConfigurationParams,
token: vscode.CancellationToken,
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index 6b12d9ca1e..2080db7a2c 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -68,8 +68,6 @@ export class Ctx {
}
if (!this.client) {
- log.info("Creating language client");
-
this._serverPath = await bootstrap(this.extCtx, this.config, this.state).catch(
(err) => {
let message = "bootstrap error. ";
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 97ec41dce3..f65620aebc 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -126,6 +126,13 @@ async function initCommonContext(ctx: Ctx) {
await ctx.activate();
});
+ ctx.registerCommand("startServer", (_) => async () => {
+ await ctx.activate();
+ });
+ ctx.registerCommand("stopServer", (_) => async () => {
+ // FIXME: We should re-use the client, that is ctx.deactivate() if none of the configs have changed
+ await ctx.disposeClient();
+ });
ctx.registerCommand("analyzerStatus", commands.analyzerStatus);
ctx.registerCommand("memoryUsage", commands.memoryUsage);
ctx.registerCommand("shuffleCrateGraph", commands.shuffleCrateGraph);