From 6a8b4f873aa42f3522d3a92384019272b6ccefd2 Mon Sep 17 00:00:00 2001 From: JasperDeSutter Date: Sun, 24 Nov 2019 11:33:12 +0100 Subject: add proc-macro crate type handling --- crates/ra_project_model/src/lib.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'crates/ra_project_model/src/lib.rs') diff --git a/crates/ra_project_model/src/lib.rs b/crates/ra_project_model/src/lib.rs index d04a8cbe2..77f729a25 100644 --- a/crates/ra_project_model/src/lib.rs +++ b/crates/ra_project_model/src/lib.rs @@ -210,6 +210,8 @@ impl ProjectWorkspace { let libcore = sysroot.core().and_then(|it| sysroot_crates.get(&it).copied()); let libstd = sysroot.std().and_then(|it| sysroot_crates.get(&it).copied()); + let libproc_macro = + sysroot.proc_macro().and_then(|it| sysroot_crates.get(&it).copied()); let mut pkg_to_lib_crate = FxHashMap::default(); let mut pkg_crates = FxHashMap::default(); @@ -236,6 +238,21 @@ impl ProjectWorkspace { lib_tgt = Some(crate_id); pkg_to_lib_crate.insert(pkg, crate_id); } + if tgt.is_proc_macro(&cargo) { + if let Some(proc_macro) = libproc_macro { + if let Err(_) = crate_graph.add_dep( + crate_id, + "proc_macro".into(), + proc_macro, + ) { + log::error!( + "cyclic dependency on proc_macro for {}", + pkg.name(&cargo) + ) + } + } + } + pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id); } } -- cgit v1.2.3