in tools/rust_analyzer/aquery.rs [424:524]
fn consolidate_lib_test_main_specs() {
// mylib.rs is a library but has tests and an entry point, and mylib2.rs
// depends on mylib.rs. The display_name of the library target mylib.rs
// should be "mylib" no matter what order the crate specs is in.
// Otherwise Rust Analyzer will not be able to resolve references to
// mylib in mylib2.rs.
let crate_specs = vec![
CrateSpec {
crate_id: "ID-mylib.rs".into(),
display_name: "mylib".into(),
edition: "2018".into(),
root_module: "mylib.rs".into(),
is_workspace_member: true,
deps: BTreeSet::new(),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "rlib".into(),
},
CrateSpec {
crate_id: "ID-mylib.rs".into(),
display_name: "mylib_test".into(),
edition: "2018".into(),
root_module: "mylib.rs".into(),
is_workspace_member: true,
deps: BTreeSet::new(),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "bin".into(),
},
CrateSpec {
crate_id: "ID-mylib.rs".into(),
display_name: "mylib_main".into(),
edition: "2018".into(),
root_module: "mylib.rs".into(),
is_workspace_member: true,
deps: BTreeSet::new(),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "bin".into(),
},
CrateSpec {
crate_id: "ID-mylib2.rs".into(),
display_name: "mylib2".into(),
edition: "2018".into(),
root_module: "mylib2.rs".into(),
is_workspace_member: true,
deps: BTreeSet::from(["ID-mylib.rs".into()]),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "rlib".into(),
},
];
for perm in crate_specs.into_iter().permutations(4) {
assert_eq!(
consolidate_crate_specs(perm).unwrap(),
BTreeSet::from([
CrateSpec {
crate_id: "ID-mylib.rs".into(),
display_name: "mylib".into(),
edition: "2018".into(),
root_module: "mylib.rs".into(),
is_workspace_member: true,
deps: BTreeSet::from([]),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "rlib".into(),
},
CrateSpec {
crate_id: "ID-mylib2.rs".into(),
display_name: "mylib2".into(),
edition: "2018".into(),
root_module: "mylib2.rs".into(),
is_workspace_member: true,
deps: BTreeSet::from(["ID-mylib.rs".into()]),
proc_macro_dylib_path: None,
source: None,
cfg: vec!["test".into(), "debug_assertions".into()],
env: BTreeMap::new(),
target: "x86_64-unknown-linux-gnu".into(),
crate_type: "rlib".into(),
},
])
);
}
}