about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-06-10 20:11:48 +0000
committerbors <bors@rust-lang.org>2022-06-10 20:11:48 +0000
commit745230c669e485bc06bd3046b0a4b587e5cd873c (patch)
treee233099e0f36bf01df304f651187fd29873df1e7
parent0bbead9fa02665411d4532d24943ab79ac2dbf2a (diff)
parent213fe5755c4145ae50cf78233ae46b0f8da55c84 (diff)
downloadrust-745230c669e485bc06bd3046b0a4b587e5cd873c.tar.gz
rust-745230c669e485bc06bd3046b0a4b587e5cd873c.zip
Auto merge of #12477 - hasali19:auto-reload, r=Veykril
Restart server automatically on settings changes

Closes #12476

I think this works quite well, but if you think it would be better to put it behind a setting I can do that.
-rw-r--r--editors/code/package.json5
-rw-r--r--editors/code/src/config.ts20
2 files changed, 19 insertions, 6 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index 03ec18a5689..e56583e63bd 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -1115,6 +1115,11 @@
                         "Search in current workspace and dependencies."
                     ]
                 },
+                "rust-analyzer.restartServerOnConfigChange": {
+                    "markdownDescription": "Whether to restart the server automatically when certain settings that require a restart are changed.",
+                    "default": false,
+                    "type": "boolean"
+                },
                 "$generated-end": {}
             }
         },
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index dba3421978a..c9ca235ed5f 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -60,13 +60,17 @@ export class Config {
 
         if (!requiresReloadOpt) return;
 
-        const userResponse = await vscode.window.showInformationMessage(
-            `Changing "${requiresReloadOpt}" requires a reload`,
-            "Reload now"
-        );
-
-        if (userResponse === "Reload now") {
+        if (this.restartServerOnConfigChange) {
             await vscode.commands.executeCommand("rust-analyzer.reload");
+        } else {
+            const userResponse = await vscode.window.showInformationMessage(
+                `Changing "${requiresReloadOpt}" requires a reload`,
+                "Reload now"
+            );
+
+            if (userResponse === "Reload now") {
+                await vscode.commands.executeCommand("rust-analyzer.reload");
+            }
         }
     }
 
@@ -119,6 +123,10 @@ export class Config {
         return this.get<RunnableEnvCfg>("runnableEnv");
     }
 
+    get restartServerOnConfigChange() {
+        return this.get<boolean>("restartServerOnConfigChange");
+    }
+
     get debug() {
         let sourceFileMap = this.get<Record<string, string> | "auto">("debug.sourceFileMap");
         if (sourceFileMap !== "auto") {