about summary refs log tree commit diff
path: root/editors/code/src/config.ts
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-08-15 11:38:44 +0000
committerbors <bors@rust-lang.org>2023-08-15 11:38:44 +0000
commitef2ee59631f9a0f62ff03b54befdef363675ceed (patch)
treea7d94f8da704a95e9f58a98d26cef7c85d92a8e3 /editors/code/src/config.ts
parentb771de3fdc1d0eed102336c2f76ca6ced07656ac (diff)
parente76d20e072cd25ca2df21ef51e973bf666f4c840 (diff)
downloadrust-ef2ee59631f9a0f62ff03b54befdef363675ceed.tar.gz
rust-ef2ee59631f9a0f62ff03b54befdef363675ceed.zip
Auto merge of #15446 - Veykril:checkOnSaveToggle, r=Veykril
Add status bar button to toggle check on save state

Closes https://github.com/rust-lang/rust-analyzer/issues/15440
cc https://github.com/rust-lang/rust-analyzer/issues/13208
Diffstat (limited to 'editors/code/src/config.ts')
-rw-r--r--editors/code/src/config.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index 0e64054c11d..39e2f767c76 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -216,6 +216,39 @@ export class Config {
             ),
         );
     }
+    get checkOnSave() {
+        return this.get<boolean>("checkOnSave") ?? false;
+    }
+    async toggleCheckOnSave() {
+        const config = this.cfg.inspect<boolean>("checkOnSave") ?? { key: "checkOnSave" };
+        let overrideInLanguage;
+        let target;
+        let value;
+        if (
+            config.workspaceFolderValue !== undefined ||
+            config.workspaceFolderLanguageValue !== undefined
+        ) {
+            target = vscode.ConfigurationTarget.WorkspaceFolder;
+            overrideInLanguage = config.workspaceFolderLanguageValue;
+            value = config.workspaceFolderValue || config.workspaceFolderLanguageValue;
+        } else if (
+            config.workspaceValue !== undefined ||
+            config.workspaceLanguageValue !== undefined
+        ) {
+            target = vscode.ConfigurationTarget.Workspace;
+            overrideInLanguage = config.workspaceLanguageValue;
+            value = config.workspaceValue || config.workspaceLanguageValue;
+        } else if (config.globalValue !== undefined || config.globalLanguageValue !== undefined) {
+            target = vscode.ConfigurationTarget.Global;
+            overrideInLanguage = config.globalLanguageValue;
+            value = config.globalValue || config.globalLanguageValue;
+        } else if (config.defaultValue !== undefined || config.defaultLanguageValue !== undefined) {
+            overrideInLanguage = config.defaultLanguageValue;
+            value = config.defaultValue || config.defaultLanguageValue;
+        }
+        await this.cfg.update("checkOnSave", !(value || false), target || null, overrideInLanguage);
+    }
+
     get traceExtension() {
         return this.get<boolean>("trace.extension");
     }