}
/// Iterate over all legacy textual scoped macros visible at the end of the module
- pub fn legacy_macros<'a>(&'a self) -> impl Iterator<Item = (&'a Name, MacroDefId)> + 'a {
+ pub(crate) fn legacy_macros<'a>(&'a self) -> impl Iterator<Item = (&'a Name, MacroDefId)> + 'a {
self.legacy_macros.iter().map(|(name, def)| (name, *def))
}
) {
// Textual scoping
self.define_legacy_macro(module_id, name.clone(), macro_);
+ self.def_map.modules[module_id].scope.declare_macro(macro_);
// Module scoping
// In Rust, `#[macro_export]` macros are unconditionally visible at the
let module_data = &def_map[module_id.local_id];
let scope = &module_data.scope;
- dbg!(scope);
-
for module_def_id in scope.declarations() {
match module_def_id {
ModuleDefId::ModuleId(id) => self.push_module(id),
self.work.push(SymbolCollectorWorkItem::Body { body: const_id.into() })
}
- // Collect legacy macros from the root module only:
- if module_data.parent.is_none() {
- for (_, macro_def_id) in scope.legacy_macros() {
- self.push_decl_macro(macro_def_id.into());
- }
- }
-
for macro_def_id in scope.macro_declarations() {
self.push_decl_macro(macro_def_id.into());
}
})
}
- pub(crate) fn push_decl_macro(&mut self, macro_def: MacroDef) {
+ fn push_decl_macro(&mut self, macro_def: MacroDef) {
self.push_file_symbol(|s| {
let name = macro_def.name(s.db.upcast())?.as_text()?;
let source = macro_def.source(s.db.upcast())?;