2383: Add alloc to the crate graph r=matklad a=marcogroppo

`alloc` has been added to the crate graph.

Completions work, but they are available even when the user has **not** declared an `extern crate alloc`. Is this the correct approach?

Fixes #2376.

Co-authored-by: Marco Groppo <marco.groppo@gmail.com>
This commit is contained in:
bors[bot] 2019-11-24 13:26:54 +00:00 committed by GitHub
commit 5cc634fa60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 0 deletions

View file

@ -209,6 +209,7 @@ impl ProjectWorkspace {
}
let libcore = sysroot.core().and_then(|it| sysroot_crates.get(&it).copied());
let liballoc = sysroot.alloc().and_then(|it| sysroot_crates.get(&it).copied());
let libstd = sysroot.std().and_then(|it| sysroot_crates.get(&it).copied());
let mut pkg_to_lib_crate = FxHashMap::default();
@ -261,6 +262,11 @@ impl ProjectWorkspace {
log::error!("cyclic dependency on core for {}", pkg.name(&cargo))
}
}
if let Some(alloc) = liballoc {
if let Err(_) = crate_graph.add_dep(from, "alloc".into(), alloc) {
log::error!("cyclic dependency on alloc for {}", pkg.name(&cargo))
}
}
if let Some(std) = libstd {
if let Err(_) = crate_graph.add_dep(from, "std".into(), std) {
log::error!("cyclic dependency on std for {}", pkg.name(&cargo))

View file

@ -31,6 +31,10 @@ impl Sysroot {
self.by_name("core")
}
pub fn alloc(&self) -> Option<SysrootCrate> {
self.by_name("alloc")
}
pub fn std(&self) -> Option<SysrootCrate> {
self.by_name("std")
}