diff options
-rw-r--r-- | crates/rust-analyzer/src/cargo_target_spec.rs | 23 | ||||
-rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 2 |
2 files changed, 17 insertions, 8 deletions
diff --git a/crates/rust-analyzer/src/cargo_target_spec.rs b/crates/rust-analyzer/src/cargo_target_spec.rs index e4dd5d92d..929926cbc 100644 --- a/crates/rust-analyzer/src/cargo_target_spec.rs +++ b/crates/rust-analyzer/src/cargo_target_spec.rs | |||
@@ -21,6 +21,7 @@ pub(crate) struct CargoTargetSpec { | |||
21 | 21 | ||
22 | impl CargoTargetSpec { | 22 | impl CargoTargetSpec { |
23 | pub(crate) fn runnable_args( | 23 | pub(crate) fn runnable_args( |
24 | snap: &GlobalStateSnapshot, | ||
24 | spec: Option<CargoTargetSpec>, | 25 | spec: Option<CargoTargetSpec>, |
25 | kind: &RunnableKind, | 26 | kind: &RunnableKind, |
26 | cfgs: &[CfgExpr], | 27 | cfgs: &[CfgExpr], |
@@ -78,13 +79,21 @@ impl CargoTargetSpec { | |||
78 | } | 79 | } |
79 | } | 80 | } |
80 | 81 | ||
81 | let mut features = Vec::new(); | 82 | if snap.config.cargo.all_features { |
82 | for cfg in cfgs { | 83 | args.push("--all-features".to_string()); |
83 | required_features(cfg, &mut features); | 84 | } else { |
84 | } | 85 | let mut features = Vec::new(); |
85 | for feature in features { | 86 | for cfg in cfgs { |
86 | args.push("--features".to_string()); | 87 | required_features(cfg, &mut features); |
87 | args.push(feature); | 88 | } |
89 | for feature in &snap.config.cargo.features { | ||
90 | features.push(feature.clone()); | ||
91 | } | ||
92 | features.dedup(); | ||
93 | for feature in features { | ||
94 | args.push("--features".to_string()); | ||
95 | args.push(feature); | ||
96 | } | ||
88 | } | 97 | } |
89 | 98 | ||
90 | Ok((args, extra_args)) | 99 | Ok((args, extra_args)) |
diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 95dd8e408..652a44694 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs | |||
@@ -666,7 +666,7 @@ pub(crate) fn runnable( | |||
666 | let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone()); | 666 | let workspace_root = spec.as_ref().map(|it| it.workspace_root.clone()); |
667 | let target = spec.as_ref().map(|s| s.target.clone()); | 667 | let target = spec.as_ref().map(|s| s.target.clone()); |
668 | let (cargo_args, executable_args) = | 668 | let (cargo_args, executable_args) = |
669 | CargoTargetSpec::runnable_args(spec, &runnable.kind, &runnable.cfg_exprs)?; | 669 | CargoTargetSpec::runnable_args(snap, spec, &runnable.kind, &runnable.cfg_exprs)?; |
670 | let label = runnable.label(target); | 670 | let label = runnable.label(target); |
671 | let location = location_link(snap, None, runnable.nav)?; | 671 | let location = location_link(snap, None, runnable.nav)?; |
672 | 672 | ||