rem_extract/startup/
identify.rs

1use 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    // core
16    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"), // adjust ctor to your version
19            core_id,
20            true,  // include in extern prelude
21            true,  // mark as sysroot dep
22        );
23        let _ = graph.add_dep(my_crate, dep);
24    }
25
26    // std
27    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}