Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/nameres/collector.rs')
-rw-r--r--crates/hir-def/src/nameres/collector.rs44
1 files changed, 27 insertions, 17 deletions
diff --git a/crates/hir-def/src/nameres/collector.rs b/crates/hir-def/src/nameres/collector.rs
index ddcee77ec4..b3ce913d9a 100644
--- a/crates/hir-def/src/nameres/collector.rs
+++ b/crates/hir-def/src/nameres/collector.rs
@@ -78,25 +78,35 @@ pub(super) fn collect_defs(db: &dyn DefDatabase, mut def_map: DefMap, tree_id: T
}
let cfg_options = &krate.cfg_options;
- let proc_macros = match &krate.proc_macro {
- Ok(proc_macros) => {
- proc_macros
- .iter()
- .enumerate()
- .map(|(idx, it)| {
- // FIXME: a hacky way to create a Name from string.
- let name =
- tt::Ident { text: it.name.clone(), span: tt::TokenId::unspecified() };
- (name.as_name(), ProcMacroExpander::new(base_db::ProcMacroId(idx as u32)))
- })
- .collect()
- }
- Err(e) => {
- def_map.proc_macro_loading_error = Some(e.clone().into_boxed_str());
- Vec::new()
+
+ let is_proc_macro = krate.is_proc_macro;
+ let proc_macros = if is_proc_macro {
+ match db.proc_macros().get(&def_map.krate) {
+ Some(Ok(proc_macros)) => {
+ proc_macros
+ .iter()
+ .enumerate()
+ .map(|(idx, it)| {
+ // FIXME: a hacky way to create a Name from string.
+ let name =
+ tt::Ident { text: it.name.clone(), span: tt::TokenId::unspecified() };
+ (name.as_name(), ProcMacroExpander::new(base_db::ProcMacroId(idx as u32)))
+ })
+ .collect()
+ }
+ Some(Err(e)) => {
+ def_map.proc_macro_loading_error = Some(e.clone().into_boxed_str());
+ Vec::new()
+ }
+ None => {
+ def_map.proc_macro_loading_error =
+ Some("No proc-macros present for crate".to_owned().into_boxed_str());
+ Vec::new()
+ }
}
+ } else {
+ vec![]
};
- let is_proc_macro = krate.is_proc_macro;
let mut collector = DefCollector {
db,