aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-02-10 14:41:44 +0000
committerFlorian Diebold <[email protected]>2019-02-10 15:20:01 +0000
commit2e1d739a8063307facf9ff098c26b02005092e05 (patch)
tree0a31bfcd8cae51b157893c516115acbe454d3ee5 /crates/ra_hir/src/nameres.rs
parentc1e295682ec23b7f9923cda07fc28d99c987f327 (diff)
Import glob imports from other crates
This is the easy part since we don't have to consider the fixpoint algorithm.
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r--crates/ra_hir/src/nameres.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs
index 0b6ab1211..2442e754e 100644
--- a/crates/ra_hir/src/nameres.rs
+++ b/crates/ra_hir/src/nameres.rs
@@ -276,12 +276,25 @@ where
276 log::debug!("glob import: {:?}", import); 276 log::debug!("glob import: {:?}", import);
277 match def.take_types() { 277 match def.take_types() {
278 Some(ModuleDef::Module(m)) => { 278 Some(ModuleDef::Module(m)) => {
279 // TODO 279 if m.krate != self.krate {
280 tested_by!(glob_across_crates);
281 // glob import from other crate => we can just import everything once
282 let item_map = self.db.item_map(m.krate);
283 let scope = &item_map[m.module_id];
284 self.update(module_id, |items| {
285 // TODO: handle shadowing and visibility
286 items.items.extend(
287 scope.items.iter().map(|(name, res)| (name.clone(), res.clone())),
288 );
289 });
290 }
280 } 291 }
281 Some(ModuleDef::Enum(e)) => { 292 Some(ModuleDef::Enum(e)) => {
282 tested_by!(glob_enum); 293 tested_by!(glob_enum);
294 // glob import from enum => just import all the variants
283 let variants = e.variants(self.db); 295 let variants = e.variants(self.db);
284 let resolutions = variants.into_iter() 296 let resolutions = variants
297 .into_iter()
285 .filter_map(|variant| { 298 .filter_map(|variant| {
286 let res = Resolution { 299 let res = Resolution {
287 def: PerNs::both(variant.into(), e.into()), 300 def: PerNs::both(variant.into(), e.into()),