Unnamed repository; edit this file 'description' to name the repository.
Merge #11314
11314: fix: Don't load auxiliary crates outside the workspace r=jonas-schievink a=jonas-schievink I'm a bit unsure about this change since this might have unanticipated consequences, but this does fix https://github.com/rust-analyzer/rust-analyzer/issues/11300. Co-authored-by: Jonas Schievink <[email protected]>
bors[bot] 2022-01-19
parent ac8806d · parent c714c13 · commit 6a64d3c
-rw-r--r--crates/project_model/src/tests.rs418
-rw-r--r--crates/project_model/src/workspace.rs9
2 files changed, 9 insertions, 418 deletions
diff --git a/crates/project_model/src/tests.rs b/crates/project_model/src/tests.rs
index 2977ff74e2..f87528fbae 100644
--- a/crates/project_model/src/tests.rs
+++ b/crates/project_model/src/tests.rs
@@ -178,80 +178,6 @@ fn cargo_hello_world_project_model_with_wildcard_overrides() {
},
},
CrateId(
- 5,
- ): CrateData {
- root_file_id: FileId(
- 6,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "const_fn",
- ),
- canonical_name: "const_fn",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [
- Dependency {
- crate_id: CrateId(
- 4,
- ),
- name: CrateName(
- "libc",
- ),
- prelude: true,
- },
- ],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
2,
): CrateData {
root_file_id: FileId(
@@ -460,70 +386,6 @@ fn cargo_hello_world_project_model_with_wildcard_overrides() {
},
},
CrateId(
- 6,
- ): CrateData {
- root_file_id: FileId(
- 7,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "build_script_build",
- ),
- canonical_name: "build-script-build",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
3,
): CrateData {
root_file_id: FileId(
@@ -683,80 +545,6 @@ fn cargo_hello_world_project_model_with_selective_overrides() {
},
},
CrateId(
- 5,
- ): CrateData {
- root_file_id: FileId(
- 6,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "const_fn",
- ),
- canonical_name: "const_fn",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [
- Dependency {
- crate_id: CrateId(
- 4,
- ),
- name: CrateName(
- "libc",
- ),
- prelude: true,
- },
- ],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
2,
): CrateData {
root_file_id: FileId(
@@ -969,70 +757,6 @@ fn cargo_hello_world_project_model_with_selective_overrides() {
},
},
CrateId(
- 6,
- ): CrateData {
- root_file_id: FileId(
- 7,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "build_script_build",
- ),
- canonical_name: "build-script-build",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
3,
): CrateData {
root_file_id: FileId(
@@ -1185,82 +909,6 @@ fn cargo_hello_world_project_model() {
},
},
CrateId(
- 5,
- ): CrateData {
- root_file_id: FileId(
- 6,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "const_fn",
- ),
- canonical_name: "const_fn",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- "test",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- "test",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [
- Dependency {
- crate_id: CrateId(
- 4,
- ),
- name: CrateName(
- "libc",
- ),
- prelude: true,
- },
- ],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
2,
): CrateData {
root_file_id: FileId(
@@ -1475,72 +1123,6 @@ fn cargo_hello_world_project_model() {
},
},
CrateId(
- 6,
- ): CrateData {
- root_file_id: FileId(
- 7,
- ),
- edition: Edition2015,
- version: Some(
- "0.2.98",
- ),
- display_name: Some(
- CrateDisplayName {
- crate_name: CrateName(
- "build_script_build",
- ),
- canonical_name: "build-script-build",
- },
- ),
- cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=default",
- "feature=std",
- "test",
- ],
- ),
- potential_cfg_options: CfgOptions(
- [
- "debug_assertions",
- "feature=align",
- "feature=const-extern-fn",
- "feature=default",
- "feature=extra_traits",
- "feature=rustc-dep-of-std",
- "feature=std",
- "feature=use_std",
- "test",
- ],
- ),
- env: Env {
- entries: {
- "CARGO_PKG_LICENSE": "",
- "CARGO_PKG_VERSION_MAJOR": "0",
- "CARGO_MANIFEST_DIR": "$ROOT$.cargo/registry/src/github.com-1ecc6299db9ec823/libc-0.2.98",
- "CARGO_PKG_VERSION": "0.2.98",
- "CARGO_PKG_AUTHORS": "",
- "CARGO_CRATE_NAME": "libc",
- "CARGO_PKG_LICENSE_FILE": "",
- "CARGO_PKG_HOMEPAGE": "",
- "CARGO_PKG_DESCRIPTION": "",
- "CARGO_PKG_NAME": "libc",
- "CARGO_PKG_VERSION_PATCH": "98",
- "CARGO": "cargo",
- "CARGO_PKG_REPOSITORY": "",
- "CARGO_PKG_VERSION_MINOR": "2",
- "CARGO_PKG_VERSION_PRE": "",
- },
- },
- dependencies: [],
- proc_macro: [],
- origin: CratesIo {
- repo: Some(
- "https://github.com/rust-lang/libc",
- ),
- },
- },
- CrateId(
3,
): CrateData {
root_file_id: FileId(
diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs
index 869b064e1d..96522bf070 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,