rem_extract/startup/
identify.rs1use ra_ap_base_db::{CrateGraph, CrateId, CrateName, Dependency};
2use triomphe::Arc;
3
4pub fn find_crate_by_name(graph: &CrateGraph, name: &str) -> Option<CrateId> {
5 graph.iter().find(|&cid| {
6 graph[cid]
7 .display_name
8 .as_ref()
9 .map(|n| n.canonical_name().as_str() == name)
10 .unwrap_or(false)
11 })
12}
13
14pub fn add_sysroot_deps(graph: &mut CrateGraph, my_crate: CrateId) {
15 if let Some(core_id) = find_crate_by_name(graph, "core") {
17 let dep = Dependency::with_prelude(
18 CrateName::new("core".into()).expect("Unable to find crate core"), core_id,
20 true, true, );
23 let _ = graph.add_dep(my_crate, dep);
24 }
25
26 if let Some(std_id) = find_crate_by_name(graph, "std") {
28 let dep = Dependency::with_prelude(
29 CrateName::new("std".into()).expect("Unable to find crate std"),
30 std_id,
31 true,
32 true,
33 );
34 let _ = graph.add_dep(my_crate, dep);
35 }
36}
37
38use rustc_hash::FxHashMap;
39
40pub fn build_ws_data(graph: &CrateGraph) -> FxHashMap<CrateId, Arc<CrateWorkspaceData>> {
41 let mut map = FxHashMap::default();
42
43 for crate_id in graph.iter() {
44 map.insert(crate_id, default_ws_data());
45 }
46
47 map
48}
49
50use ra_ap_base_db::CrateWorkspaceData;
51
52fn default_ws_data() -> Arc<CrateWorkspaceData> {
53 Arc::new(CrateWorkspaceData {
54 proc_macro_cwd: None,
55 data_layout: Err("not available".into()),
56 toolchain: None,
57 })
58}