diff --git a/crates/hir-def/src/data.rs b/crates/hir-def/src/data.rs index 73d4eebb85a..701cc29f4ea 100644 --- a/crates/hir-def/src/data.rs +++ b/crates/hir-def/src/data.rs @@ -14,6 +14,7 @@ db::DefDatabase, expander::{Expander, Mark}, item_tree::{self, AssocItem, FnFlags, ItemTree, ItemTreeId, ModItem, Param, TreeId}, + macro_call_as_call_id, macro_id_to_def_id, nameres::{ attr_resolution::ResolvedAttr, diagnostics::DefDiagnostic, @@ -639,18 +640,15 @@ fn collect(&mut self, item_tree: &ItemTree, tree_id: TreeId, assoc_items: &[Asso } AssocItem::MacroCall(call) => { let file_id = self.expander.current_file_id(); - let root = self.db.parse_or_expand(file_id); let call = &item_tree[call]; - - let ast_id_map = self.db.ast_id_map(file_id); - let macro_call = ast_id_map.get(call.ast_id).to_node(&root); - let _cx = stdx::panic_context::enter(format!( - "collect_items MacroCall: {macro_call}" - )); let module = self.expander.module.local_id; - if let Ok(res) = - self.expander.enter_expand::(self.db, macro_call, |path| { + if let Ok(Some(call_id)) = macro_call_as_call_id( + self.db.upcast(), + &AstIdWithPath::new(file_id, call.ast_id, Clone::clone(&call.path)), + call.expand_to, + self.expander.module.krate(), + |path| { self.def_map .resolve_path( self.db, @@ -660,8 +658,11 @@ fn collect(&mut self, item_tree: &ItemTree, tree_id: TreeId, assoc_items: &[Asso ) .0 .take_macros() - }) - { + .map(|it| macro_id_to_def_id(self.db, it)) + }, + ) { + let res = + self.expander.enter_expand_id::(self.db, call_id); self.collect_macro_items(res, &|| hir_expand::MacroCallKind::FnLike { ast_id: InFile::new(file_id, call.ast_id), expand_to: hir_expand::ExpandTo::Items,