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.rs28
1 files changed, 17 insertions, 11 deletions
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs
index 3e689e360..698e40247 100644
--- a/crates/ra_hir/src/nameres/collector.rs
+++ b/crates/ra_hir/src/nameres/collector.rs
@@ -531,20 +531,26 @@ where
531 self.def_collector.import_all_macros_exported(prelude_module); 531 self.def_collector.import_all_macros_exported(prelude_module);
532 } 532 }
533 533
534 // This should be processed eagerly instead of deferred to resolving.
535 // `#[macro_use] extern crate` is hoisted to imports macros before collecting
536 // any other items.
537 for item in items {
538 if let raw::RawItem::Import(import_id) = *item {
539 let import = self.raw_items[import_id].clone();
540 if import.is_extern_crate && import.is_macro_use {
541 self.def_collector.import_macros_from_extern_crate(&import);
542 }
543 }
544 }
545
534 for item in items { 546 for item in items {
535 match *item { 547 match *item {
536 raw::RawItem::Module(m) => self.collect_module(&self.raw_items[m]), 548 raw::RawItem::Module(m) => self.collect_module(&self.raw_items[m]),
537 raw::RawItem::Import(import_id) => { 549 raw::RawItem::Import(import_id) => self.def_collector.unresolved_imports.push((
538 let import = self.raw_items[import_id].clone(); 550 self.module_id,
539 // This should be processed eagerly instead of deferred to resolving. 551 import_id,
540 // Otherwise, since it will only mutate `global_macro_scope` 552 self.raw_items[import_id].clone(),
541 // without `update` names in `mod`s, unresolved macros cannot be expanded. 553 )),
542 if import.is_extern_crate && import.is_macro_use {
543 self.def_collector.import_macros_from_extern_crate(&import);
544 }
545
546 self.def_collector.unresolved_imports.push((self.module_id, import_id, import));
547 }
548 raw::RawItem::Def(def) => self.define_def(&self.raw_items[def]), 554 raw::RawItem::Def(def) => self.define_def(&self.raw_items[def]),
549 raw::RawItem::Macro(mac) => self.collect_macro(&self.raw_items[mac]), 555 raw::RawItem::Macro(mac) => self.collect_macro(&self.raw_items[mac]),
550 } 556 }