From 22ea5595a8dbeb8b203e1f031c103a30c9376c0b Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 18 Jan 2022 18:17:43 +0100 Subject: [PATCH] Don't load auxiliary crates outside the workspace --- crates/project_model/src/workspace.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs index 869b064e1da4..96522bf070a4 100644 --- a/crates/project_model/src/workspace.rs +++ b/crates/project_model/src/workspace.rs @@ -574,6 +574,15 @@ fn cargo_to_crate_graph( has_private |= cargo[pkg].metadata.rustc_private; let mut lib_tgt = None; for &tgt in cargo[pkg].targets.iter() { + if cargo[tgt].kind != TargetKind::Lib && !cargo[pkg].is_member { + // For non-workspace-members, Cargo does not resolve dev-dependencies, so we don't + // add any targets except the library target, since those will not work correctly if + // they use dev-dependencies. + // In fact, they can break quite badly if multiple client workspaces get merged: + // https://github.com/rust-analyzer/rust-analyzer/issues/11300 + continue; + } + if let Some(file_id) = load(&cargo[tgt].root) { let crate_id = add_target_crate_root( &mut crate_graph,