aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres/collector.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/nameres/collector.rs')
-rw-r--r--crates/ra_hir/src/nameres/collector.rs17
1 files changed, 13 insertions, 4 deletions
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs
index 5d1c42926..3e689e360 100644
--- a/crates/ra_hir/src/nameres/collector.rs
+++ b/crates/ra_hir/src/nameres/collector.rs
@@ -185,11 +185,14 @@ where
185 185
186 if let Some(ModuleDef::Module(m)) = res.take_types() { 186 if let Some(ModuleDef::Module(m)) = res.take_types() {
187 tested_by!(macro_rules_from_other_crates_are_visible_with_macro_use); 187 tested_by!(macro_rules_from_other_crates_are_visible_with_macro_use);
188 self.import_all_macros_exported(m);
189 }
190 }
188 191
189 let item_map = self.db.crate_def_map(m.krate); 192 fn import_all_macros_exported(&mut self, module: Module) {
190 for (name, &macro_id) in &item_map.exported_macros { 193 let item_map = self.db.crate_def_map(module.krate);
191 self.global_macro_scope.insert(name.clone(), macro_id); 194 for (name, &macro_id) in &item_map.exported_macros {
192 } 195 self.global_macro_scope.insert(name.clone(), macro_id);
193 } 196 }
194 } 197 }
195 198
@@ -522,6 +525,12 @@ where
522 DB: DefDatabase, 525 DB: DefDatabase,
523{ 526{
524 fn collect(&mut self, items: &[raw::RawItem]) { 527 fn collect(&mut self, items: &[raw::RawItem]) {
528 // Prelude module is always considered to be `#[macro_use]`.
529 if let Some(prelude_module) = self.def_collector.def_map.prelude {
530 tested_by!(prelude_is_macro_use);
531 self.def_collector.import_all_macros_exported(prelude_module);
532 }
533
525 for item in items { 534 for item in items {
526 match *item { 535 match *item {
527 raw::RawItem::Module(m) => self.collect_module(&self.raw_items[m]), 536 raw::RawItem::Module(m) => self.collect_module(&self.raw_items[m]),