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.rs22
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();
}
}