Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_def/src/item_scope.rs')
| -rw-r--r-- | crates/hir_def/src/item_scope.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/crates/hir_def/src/item_scope.rs b/crates/hir_def/src/item_scope.rs index 3825911f1d..51586142e2 100644 --- a/crates/hir_def/src/item_scope.rs +++ b/crates/hir_def/src/item_scope.rs @@ -12,8 +12,8 @@ use stdx::format_to; use syntax::ast; use crate::{ - db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, ConstId, ImplId, - LocalModuleId, MacroDefId, ModuleDefId, ModuleId, TraitId, + attr::AttrId, db::DefDatabase, per_ns::PerNs, visibility::Visibility, AdtId, BuiltinType, + ConstId, ImplId, LocalModuleId, MacroDefId, ModuleDefId, ModuleId, TraitId, }; #[derive(Copy, Clone)] @@ -61,6 +61,7 @@ pub struct ItemScope { // be all resolved to the last one defined if shadowing happens. legacy_macros: FxHashMap<Name, MacroDefId>, attr_macros: FxHashMap<AstId<ast::Item>, MacroCallId>, + derive_macros: FxHashMap<AstId<ast::Item>, (AttrId, MacroCallId)>, } pub(crate) static BUILTIN_SCOPE: Lazy<FxHashMap<Name, PerNs>> = Lazy::new(|| { @@ -182,6 +183,21 @@ impl ItemScope { self.attr_macros.iter().map(|(k, v)| (*k, *v)) } + pub(crate) fn add_derive_macro_invoc( + &mut self, + item: AstId<ast::Item>, + call: MacroCallId, + attr_id: AttrId, + ) { + self.derive_macros.insert(item, (attr_id, call)); + } + + pub(crate) fn derive_macro_invocs( + &self, + ) -> impl Iterator<Item = (AstId<ast::Item>, (AttrId, MacroCallId))> + '_ { + self.derive_macros.iter().map(|(k, v)| (*k, *v)) + } + pub(crate) fn unnamed_trait_vis(&self, tr: TraitId) -> Option<Visibility> { self.unnamed_trait_imports.get(&tr).copied() } @@ -320,6 +336,7 @@ impl ItemScope { unnamed_trait_imports, legacy_macros, attr_macros, + derive_macros, } = self; types.shrink_to_fit(); values.shrink_to_fit(); @@ -331,6 +348,7 @@ impl ItemScope { unnamed_trait_imports.shrink_to_fit(); legacy_macros.shrink_to_fit(); attr_macros.shrink_to_fit(); + derive_macros.shrink_to_fit(); } } |