about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-06-14 11:43:31 +0000
committerbors <bors@rust-lang.org>2022-06-14 11:43:31 +0000
commit65874dfff205335840cc9265ba06d74f234b719d (patch)
tree80af695b20494ff90a4a2e73dca1197c6e879d60
parent1ad6d324b2f2c922f377d5ea6c9747012ca636ea (diff)
parent002447d6cbdb19b80c998792486b655f0bd53365 (diff)
downloadrust-65874dfff205335840cc9265ba06d74f234b719d.tar.gz
rust-65874dfff205335840cc9265ba06d74f234b719d.zip
Auto merge of #12529 - Veykril:vs-reload, r=Veykril
fix: Ask the user to reload the vscode window when changing server settings

These requires a window reload, as they are set before the server is being started
-rw-r--r--editors/code/src/config.ts33
1 files changed, 23 insertions, 10 deletions
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index c9ca235ed5f..b04f18890b9 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -16,14 +16,17 @@ export class Config {
     readonly extensionId = "rust-lang.rust-analyzer";
 
     readonly rootSection = "rust-analyzer";
+    private readonly requiresWorkspaceReloadOpts = ["serverPath", "server"].map(
+        (opt) => `${this.rootSection}.${opt}`
+    );
     private readonly requiresReloadOpts = [
-        "serverPath",
-        "server",
         "cargo",
         "procMacro",
         "files",
         "lens", // works as lens.*
-    ].map((opt) => `${this.rootSection}.${opt}`);
+    ]
+        .map((opt) => `${this.rootSection}.${opt}`)
+        .concat(this.requiresWorkspaceReloadOpts);
 
     readonly package: {
         version: string;
@@ -60,16 +63,26 @@ export class Config {
 
         if (!requiresReloadOpt) return;
 
-        if (this.restartServerOnConfigChange) {
+        const requiresWorkspaceReloadOpt = this.requiresWorkspaceReloadOpts.find((opt) =>
+            event.affectsConfiguration(opt)
+        );
+
+        if (!requiresWorkspaceReloadOpt && this.restartServerOnConfigChange) {
             await vscode.commands.executeCommand("rust-analyzer.reload");
-        } else {
-            const userResponse = await vscode.window.showInformationMessage(
-                `Changing "${requiresReloadOpt}" requires a reload`,
-                "Reload now"
-            );
+            return;
+        }
+
+        const message = requiresWorkspaceReloadOpt
+            ? `Changing "${requiresWorkspaceReloadOpt}" requires a window reload`
+            : `Changing "${requiresReloadOpt}" requires a reload`;
+        const userResponse = await vscode.window.showInformationMessage(message, "Reload now");
 
+        if (userResponse === "Reload now") {
+            const command = requiresWorkspaceReloadOpt
+                ? "workbench.action.reloadWindow"
+                : "rust-analyzer.reload";
             if (userResponse === "Reload now") {
-                await vscode.commands.executeCommand("rust-analyzer.reload");
+                await vscode.commands.executeCommand(command);
             }
         }
     }