about summary refs log tree commit diff
path: root/editors/code/src
diff options
context:
space:
mode:
authoroxalica <oxalicc@pm.me>2019-12-13 18:16:34 +0800
committeroxalica <oxalicc@pm.me>2019-12-13 18:16:34 +0800
commitaf4eb266457eb784010da28d80535f9fd38d4d1e (patch)
tree8fb6f839a14985fa5dae695ff074495b87b8dd7a /editors/code/src
parent5eb5e80de99338daceb82c933e366f95f7e1719c (diff)
downloadrust-af4eb266457eb784010da28d80535f9fd38d4d1e.tar.gz
rust-af4eb266457eb784010da28d80535f9fd38d4d1e.zip
Support setting cargo features
Diffstat (limited to 'editors/code/src')
-rw-r--r--editors/code/src/config.ts70
-rw-r--r--editors/code/src/server.ts1
2 files changed, 58 insertions, 13 deletions
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index 2d3b6a54ea5..6d709f7a852 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -15,6 +15,12 @@ export interface CargoWatchOptions {
     ignore: string[];
 }
 
+export interface CargoFeatures {
+    noDefaultFeatures: boolean;
+    allFeatures: boolean;
+    features: string[];
+}
+
 export class Config {
     public highlightingOn = true;
     public rainbowHighlightingOn = false;
@@ -35,8 +41,14 @@ export class Config {
         command: '',
         ignore: [],
     };
+    public cargoFeatures: CargoFeatures = {
+        noDefaultFeatures: false,
+        allFeatures: false,
+        features: [],
+    };
 
     private prevEnhancedTyping: null | boolean = null;
+    private prevCargoFeatures: null | CargoFeatures = null;
 
     constructor() {
         vscode.workspace.onDidChangeConfiguration(_ =>
@@ -47,6 +59,8 @@ export class Config {
 
     public userConfigChanged() {
         const config = vscode.workspace.getConfiguration('rust-analyzer');
+        let requireReloadMessage = null;
+
         if (config.has('highlightingOn')) {
             this.highlightingOn = config.get('highlightingOn') as boolean;
         }
@@ -74,19 +88,7 @@ export class Config {
         }
 
         if (this.prevEnhancedTyping !== this.enableEnhancedTyping) {
-            const reloadAction = 'Reload now';
-            vscode.window
-                .showInformationMessage(
-                    'Changing enhanced typing setting requires a reload',
-                    reloadAction,
-                )
-                .then(selectedAction => {
-                    if (selectedAction === reloadAction) {
-                        vscode.commands.executeCommand(
-                            'workbench.action.reloadWindow',
-                        );
-                    }
-                });
+            requireReloadMessage = 'Changing enhanced typing setting requires a reload';
             this.prevEnhancedTyping = this.enableEnhancedTyping;
         }
 
@@ -153,5 +155,47 @@ export class Config {
         if (config.has('withSysroot')) {
             this.withSysroot = config.get('withSysroot') || false;
         }
+
+        if (config.has('cargoFeatures.noDefaultFeatures')) {
+            this.cargoFeatures.noDefaultFeatures = config.get(
+                'cargoFeatures.noDefaultFeatures',
+                false,
+            );
+        }
+        if (config.has('cargoFeatures.allFeatures')) {
+            this.cargoFeatures.allFeatures = config.get(
+                'cargoFeatures.allFeatures',
+                false,
+            );
+        }
+        if (config.has('cargoFeatures.features')) {
+            this.cargoFeatures.features = config.get(
+                'cargoFeatures.features',
+                [],
+            );
+        }
+
+        if (this.prevCargoFeatures !== null && (
+            this.cargoFeatures.allFeatures !== this.prevCargoFeatures.allFeatures ||
+            this.cargoFeatures.noDefaultFeatures !== this.prevCargoFeatures.noDefaultFeatures ||
+            this.cargoFeatures.features.length !== this.prevCargoFeatures.features.length ||
+            this.cargoFeatures.features.some((v, i) => v !== this.prevCargoFeatures!.features[i])
+        )) {
+            requireReloadMessage = 'Changing cargo features requires a reload';
+        }
+        this.prevCargoFeatures = { ...this.cargoFeatures };
+
+        if (requireReloadMessage !== null) {
+            const reloadAction = 'Reload now';
+            vscode.window
+                .showInformationMessage(requireReloadMessage, reloadAction)
+                .then(selectedAction => {
+                    if (selectedAction === reloadAction) {
+                        vscode.commands.executeCommand(
+                            'workbench.action.reloadWindow',
+                        );
+                    }
+                });
+        }
     }
 }
diff --git a/editors/code/src/server.ts b/editors/code/src/server.ts
index 2fe45f1ed68..5ace1d0faeb 100644
--- a/editors/code/src/server.ts
+++ b/editors/code/src/server.ts
@@ -59,6 +59,7 @@ export class Server {
                 useClientWatching: Server.config.useClientWatching,
                 featureFlags: Server.config.featureFlags,
                 withSysroot: Server.config.withSysroot,
+                cargoFeatures: Server.config.cargoFeatures,
             },
             traceOutputChannel,
         };