diff options
-rw-r--r-- | crates/ra_flycheck/src/lib.rs | 24 | ||||
-rw-r--r-- | crates/rust-analyzer/src/config.rs | 4 |
2 files changed, 24 insertions, 4 deletions
diff --git a/crates/ra_flycheck/src/lib.rs b/crates/ra_flycheck/src/lib.rs index 041e38a9f..6c4170529 100644 --- a/crates/ra_flycheck/src/lib.rs +++ b/crates/ra_flycheck/src/lib.rs | |||
@@ -18,8 +18,17 @@ pub use cargo_metadata::diagnostic::{ | |||
18 | 18 | ||
19 | #[derive(Clone, Debug, PartialEq, Eq)] | 19 | #[derive(Clone, Debug, PartialEq, Eq)] |
20 | pub enum FlycheckConfig { | 20 | pub enum FlycheckConfig { |
21 | CargoCommand { command: String, all_targets: bool, all_features: bool, extra_args: Vec<String> }, | 21 | CargoCommand { |
22 | CustomCommand { command: String, args: Vec<String> }, | 22 | command: String, |
23 | all_targets: bool, | ||
24 | all_features: bool, | ||
25 | features: Vec<String>, | ||
26 | extra_args: Vec<String>, | ||
27 | }, | ||
28 | CustomCommand { | ||
29 | command: String, | ||
30 | args: Vec<String>, | ||
31 | }, | ||
23 | } | 32 | } |
24 | 33 | ||
25 | /// Flycheck wraps the shared state and communication machinery used for | 34 | /// Flycheck wraps the shared state and communication machinery used for |
@@ -188,7 +197,13 @@ impl FlycheckThread { | |||
188 | self.check_process = None; | 197 | self.check_process = None; |
189 | 198 | ||
190 | let mut cmd = match &self.config { | 199 | let mut cmd = match &self.config { |
191 | FlycheckConfig::CargoCommand { command, all_targets, all_features, extra_args } => { | 200 | FlycheckConfig::CargoCommand { |
201 | command, | ||
202 | all_targets, | ||
203 | all_features, | ||
204 | extra_args, | ||
205 | features, | ||
206 | } => { | ||
192 | let mut cmd = Command::new(ra_toolchain::cargo()); | 207 | let mut cmd = Command::new(ra_toolchain::cargo()); |
193 | cmd.arg(command); | 208 | cmd.arg(command); |
194 | cmd.args(&["--workspace", "--message-format=json", "--manifest-path"]) | 209 | cmd.args(&["--workspace", "--message-format=json", "--manifest-path"]) |
@@ -198,6 +213,9 @@ impl FlycheckThread { | |||
198 | } | 213 | } |
199 | if *all_features { | 214 | if *all_features { |
200 | cmd.arg("--all-features"); | 215 | cmd.arg("--all-features"); |
216 | } else if !features.is_empty() { | ||
217 | cmd.arg("--features"); | ||
218 | cmd.arg(features.join(" ")); | ||
201 | } | 219 | } |
202 | cmd.args(extra_args); | 220 | cmd.args(extra_args); |
203 | cmd | 221 | cmd |
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 17671f89e..5d5f7d66a 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs | |||
@@ -147,6 +147,7 @@ impl Default for Config { | |||
147 | all_targets: true, | 147 | all_targets: true, |
148 | all_features: false, | 148 | all_features: false, |
149 | extra_args: Vec::new(), | 149 | extra_args: Vec::new(), |
150 | features: Vec::new(), | ||
150 | }), | 151 | }), |
151 | 152 | ||
152 | inlay_hints: InlayHintsConfig { | 153 | inlay_hints: InlayHintsConfig { |
@@ -234,13 +235,14 @@ impl Config { | |||
234 | } | 235 | } |
235 | // otherwise configure command customizations | 236 | // otherwise configure command customizations |
236 | _ => { | 237 | _ => { |
237 | if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets, all_features }) | 238 | if let Some(FlycheckConfig::CargoCommand { command, extra_args, all_targets, all_features, features }) |
238 | = &mut self.check | 239 | = &mut self.check |
239 | { | 240 | { |
240 | set(value, "/checkOnSave/extraArgs", extra_args); | 241 | set(value, "/checkOnSave/extraArgs", extra_args); |
241 | set(value, "/checkOnSave/command", command); | 242 | set(value, "/checkOnSave/command", command); |
242 | set(value, "/checkOnSave/allTargets", all_targets); | 243 | set(value, "/checkOnSave/allTargets", all_targets); |
243 | set(value, "/checkOnSave/allFeatures", all_features); | 244 | set(value, "/checkOnSave/allFeatures", all_features); |
245 | *features = self.cargo.features.clone(); | ||
244 | } | 246 | } |
245 | } | 247 | } |
246 | }; | 248 | }; |