]> git.lizzy.rs Git - rust.git/commitdiff
Implement rust-analyzer feature configuration to tests.
authordaxpedda <daxpedda@gmail.com>
Thu, 2 Jul 2020 14:13:24 +0000 (16:13 +0200)
committerdaxpedda <daxpedda@gmail.com>
Thu, 2 Jul 2020 14:13:24 +0000 (16:13 +0200)
crates/rust-analyzer/src/cargo_target_spec.rs
crates/rust-analyzer/src/to_proto.rs

index e4dd5d92d267bad6bd9798234369d718c393402c..929926cbc5bb50b583e1219f5a7e1c8829595de4 100644 (file)
@@ -21,6 +21,7 @@ pub(crate) struct CargoTargetSpec {
 
 impl CargoTargetSpec {
     pub(crate) fn runnable_args(
+        snap: &GlobalStateSnapshot,
         spec: Option<CargoTargetSpec>,
         kind: &RunnableKind,
         cfgs: &[CfgExpr],
@@ -78,13 +79,21 @@ pub(crate) fn runnable_args(
             }
         }
 
-        let mut features = Vec::new();
-        for cfg in cfgs {
-            required_features(cfg, &mut features);
-        }
-        for feature in features {
-            args.push("--features".to_string());
-            args.push(feature);
+        if snap.config.cargo.all_features {
+            args.push("--all-features".to_string());
+        } else {
+            let mut features = Vec::new();
+            for cfg in cfgs {
+                required_features(cfg, &mut features);
+            }
+            for feature in &snap.config.cargo.features {
+                features.push(feature.clone());
+            }
+            features.dedup();
+            for feature in features {
+                args.push("--features".to_string());
+                args.push(feature);
+            }
         }
 
         Ok((args, extra_args))
index 95dd8e408d0d8ec41eb38a257dffa0f1c1c05f7f..652a4469468aaa903a79cf568f7b00c40211529d 100644 (file)
@@ -666,7 +666,7 @@ pub(crate) fn runnable(
     let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone());
     let target = spec.as_ref().map(|s| s.target.clone());
     let (cargo_args, executable_args) =
-        CargoTargetSpec::runnable_args(spec, &runnable.kind, &runnable.cfg_exprs)?;
+        CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg_exprs)?;
     let label = runnable.label(target);
     let location = location_link(snap, None, runnable.nav)?;