diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-06-10 08:39:44 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-06-10 08:39:44 +0100 |
commit | 560b98bc505be6ff70876df661e4055e1b38a78c (patch) | |
tree | e88fd7c03820fa2131b4dd1c4e0789590ebe7629 /crates | |
parent | c9fc7251ca2ccdbd42fd21130139026878633b77 (diff) | |
parent | fe21fc2d259cbe2a32bfee3432f2c51ade079083 (diff) |
Merge #4822
4822: Let checkOnSafe default to some of the options of cargo r=matklad a=clemenswasser
This will fix #4631
The implementation works (as far as I have tested) but is suboptimal because I am copying the "cargo.features".
Co-authored-by: Clemens Wasser <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_flycheck/src/lib.rs | 24 | ||||
-rw-r--r-- | crates/rust-analyzer/src/config.rs | 6 |
2 files changed, 25 insertions, 5 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..1253db836 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 | *all_features = get(value, "/checkOnSave/allFeatures").unwrap_or(self.cargo.all_features); |
245 | *features = get(value, "/checkOnSave/features").unwrap_or(self.cargo.features.clone()); | ||
244 | } | 246 | } |
245 | } | 247 | } |
246 | }; | 248 | }; |