Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/db.rs')
-rw-r--r--crates/hir-def/src/db.rs233
1 files changed, 153 insertions, 80 deletions
diff --git a/crates/hir-def/src/db.rs b/crates/hir-def/src/db.rs
index 58688d5f41..94f899a226 100644
--- a/crates/hir-def/src/db.rs
+++ b/crates/hir-def/src/db.rs
@@ -6,34 +6,35 @@ use intern::sym;
use la_arena::ArenaMap;
use span::{EditionedFileId, MacroCallId};
use syntax::{AstPtr, ast};
+use thin_vec::ThinVec;
use triomphe::Arc;
use crate::{
- AttrDefId, BlockId, BlockLoc, ConstBlockId, ConstBlockLoc, ConstId, ConstLoc, DefWithBodyId,
- EnumId, EnumLoc, EnumVariantId, EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId,
- ExternCrateLoc, FunctionId, FunctionLoc, GenericDefId, ImplId, ImplLoc, InTypeConstId,
- InTypeConstLoc, LocalFieldId, Macro2Id, Macro2Loc, MacroId, MacroRulesId, MacroRulesLoc,
- MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId, StaticLoc, StructId, StructLoc,
- TraitAliasId, TraitAliasLoc, TraitId, TraitLoc, TypeAliasId, TypeAliasLoc, UnionId, UnionLoc,
- UseId, UseLoc, VariantId,
+ AttrDefId, BlockId, BlockLoc, ConstId, ConstLoc, DefWithBodyId, EnumId, EnumLoc, EnumVariantId,
+ EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId, ExternCrateLoc, FunctionId,
+ FunctionLoc, GenericDefId, ImplId, ImplLoc, LocalFieldId, Macro2Id, Macro2Loc, MacroId,
+ MacroRulesId, MacroRulesLoc, MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId,
+ StaticLoc, StructId, StructLoc, TraitAliasId, TraitAliasLoc, TraitId, TraitLoc, TypeAliasId,
+ TypeAliasLoc, UnionId, UnionLoc, UseId, UseLoc, VariantId,
attr::{Attrs, AttrsWithOwner},
- data::{
- ConstData, ExternCrateDeclData, FunctionData, ImplData, Macro2Data, MacroRulesData,
- ProcMacroData, StaticData, TraitAliasData, TraitData, TypeAliasData,
- adt::{EnumData, EnumVariantData, EnumVariants, StructData, VariantData},
+ expr_store::{
+ Body, BodySourceMap, ExpressionStore, ExpressionStoreSourceMap, scope::ExprScopes,
},
- expr_store::{Body, BodySourceMap, scope::ExprScopes},
- generics::GenericParams,
+ hir::generics::GenericParams,
import_map::ImportMap,
- item_tree::{AttrOwner, ItemTree, ItemTreeSourceMaps},
+ item_tree::{AttrOwner, ItemTree},
lang_item::{self, LangItem, LangItemTarget, LangItems},
nameres::{
DefMap, LocalDefMap,
assoc::{ImplItems, TraitItems},
diagnostics::DefDiagnostics,
},
+ signatures::{
+ ConstSignature, EnumSignature, EnumVariants, FunctionSignature, ImplSignature,
+ InactiveEnumVariantCode, StaticSignature, StructSignature, TraitAliasSignature,
+ TraitSignature, TypeAliasSignature, UnionSignature, VariantFields,
+ },
tt,
- type_ref::TypesSourceMap,
visibility::{self, Visibility},
};
@@ -96,11 +97,6 @@ pub trait InternDatabase: RootQueryDb {
#[salsa::interned]
fn intern_block(&self, loc: BlockLoc) -> BlockId;
- #[salsa::interned]
- fn intern_anonymous_const(&self, id: ConstBlockLoc) -> ConstBlockId;
-
- #[salsa::interned]
- fn intern_in_type_const(&self, id: InTypeConstLoc) -> InTypeConstId;
}
#[query_group::query_group]
@@ -122,18 +118,6 @@ pub trait DefDatabase:
#[salsa::invoke_actual(ItemTree::block_item_tree_query)]
fn block_item_tree(&self, block_id: BlockId) -> Arc<ItemTree>;
- #[salsa::invoke(ItemTree::file_item_tree_with_source_map_query)]
- fn file_item_tree_with_source_map(
- &self,
- file_id: HirFileId,
- ) -> (Arc<ItemTree>, Arc<ItemTreeSourceMaps>);
-
- #[salsa::invoke_actual(ItemTree::block_item_tree_with_source_map_query)]
- fn block_item_tree_with_source_map(
- &self,
- block_id: BlockId,
- ) -> (Arc<ItemTree>, Arc<ItemTreeSourceMaps>);
-
#[salsa::invoke_actual(DefMap::crate_local_def_map_query)]
fn crate_local_def_map(&self, krate: Crate) -> (Arc<DefMap>, Arc<LocalDefMap>);
@@ -150,30 +134,22 @@ pub trait DefDatabase:
// region:data
- #[salsa::transparent]
- #[salsa::invoke_actual(VariantData::variant_data_query)]
- fn variant_data(&self, id: VariantId) -> Arc<VariantData>;
-
- #[salsa::invoke_actual(VariantData::variant_data_with_diagnostics_query)]
- fn variant_data_with_diagnostics(&self, id: VariantId) -> (Arc<VariantData>, DefDiagnostics);
-
- #[salsa::invoke_actual(StructData::struct_data_query)]
- fn struct_data(&self, id: StructId) -> Arc<StructData>;
-
- #[salsa::invoke_actual(StructData::union_data_query)]
- fn union_data(&self, id: UnionId) -> Arc<StructData>;
+ #[salsa::invoke_actual(VariantFields::query)]
+ fn variant_fields_with_source_map(
+ &self,
+ id: VariantId,
+ ) -> (Arc<VariantFields>, Arc<ExpressionStoreSourceMap>);
- #[salsa::invoke_actual(EnumData::enum_data_query)]
- fn enum_data(&self, e: EnumId) -> Arc<EnumData>;
+ #[salsa::tracked]
+ fn enum_variants(&self, id: EnumId) -> Arc<EnumVariants> {
+ self.enum_variants_with_diagnostics(id).0
+ }
#[salsa::invoke_actual(EnumVariants::enum_variants_query)]
- fn enum_variants(&self, e: EnumId) -> Arc<EnumVariants>;
-
- #[salsa::invoke_actual(EnumVariantData::enum_variant_data_query)]
- fn enum_variant_data(&self, id: EnumVariantId) -> Arc<EnumVariantData>;
-
- #[salsa::invoke_actual(ImplData::impl_data_query)]
- fn impl_data(&self, e: ImplId) -> Arc<ImplData>;
+ fn enum_variants_with_diagnostics(
+ &self,
+ id: EnumId,
+ ) -> (Arc<EnumVariants>, Option<Arc<ThinVec<InactiveEnumVariantCode>>>);
#[salsa::transparent]
#[salsa::invoke_actual(ImplItems::impl_items_query)]
@@ -182,9 +158,6 @@ pub trait DefDatabase:
#[salsa::invoke_actual(ImplItems::impl_items_with_diagnostics_query)]
fn impl_items_with_diagnostics(&self, e: ImplId) -> (Arc<ImplItems>, DefDiagnostics);
- #[salsa::invoke_actual(TraitData::trait_data_query)]
- fn trait_data(&self, e: TraitId) -> Arc<TraitData>;
-
#[salsa::transparent]
#[salsa::invoke_actual(TraitItems::trait_items_query)]
fn trait_items(&self, e: TraitId) -> Arc<TraitItems>;
@@ -192,32 +165,120 @@ pub trait DefDatabase:
#[salsa::invoke_actual(TraitItems::trait_items_with_diagnostics_query)]
fn trait_items_with_diagnostics(&self, tr: TraitId) -> (Arc<TraitItems>, DefDiagnostics);
- #[salsa::invoke_actual(TraitAliasData::trait_alias_query)]
- fn trait_alias_data(&self, e: TraitAliasId) -> Arc<TraitAliasData>;
+ #[salsa::tracked]
+ fn variant_fields(&self, id: VariantId) -> Arc<VariantFields> {
+ self.variant_fields_with_source_map(id).0
+ }
- #[salsa::invoke_actual(TypeAliasData::type_alias_data_query)]
- fn type_alias_data(&self, e: TypeAliasId) -> Arc<TypeAliasData>;
+ #[salsa::tracked]
+ fn trait_signature(&self, trait_: TraitId) -> Arc<TraitSignature> {
+ self.trait_signature_with_source_map(trait_).0
+ }
- #[salsa::invoke_actual(FunctionData::fn_data_query)]
- fn function_data(&self, func: FunctionId) -> Arc<FunctionData>;
+ #[salsa::tracked]
+ fn impl_signature(&self, impl_: ImplId) -> Arc<ImplSignature> {
+ self.impl_signature_with_source_map(impl_).0
+ }
- #[salsa::invoke_actual(ConstData::const_data_query)]
- fn const_data(&self, konst: ConstId) -> Arc<ConstData>;
+ #[salsa::tracked]
+ fn struct_signature(&self, struct_: StructId) -> Arc<StructSignature> {
+ self.struct_signature_with_source_map(struct_).0
+ }
- #[salsa::invoke_actual(StaticData::static_data_query)]
- fn static_data(&self, statik: StaticId) -> Arc<StaticData>;
+ #[salsa::tracked]
+ fn union_signature(&self, union_: UnionId) -> Arc<UnionSignature> {
+ self.union_signature_with_source_map(union_).0
+ }
- #[salsa::invoke_actual(Macro2Data::macro2_data_query)]
- fn macro2_data(&self, makro: Macro2Id) -> Arc<Macro2Data>;
+ #[salsa::tracked]
+ fn enum_signature(&self, e: EnumId) -> Arc<EnumSignature> {
+ self.enum_signature_with_source_map(e).0
+ }
- #[salsa::invoke_actual(MacroRulesData::macro_rules_data_query)]
- fn macro_rules_data(&self, makro: MacroRulesId) -> Arc<MacroRulesData>;
+ #[salsa::tracked]
+ fn const_signature(&self, e: ConstId) -> Arc<ConstSignature> {
+ self.const_signature_with_source_map(e).0
+ }
- #[salsa::invoke_actual(ProcMacroData::proc_macro_data_query)]
- fn proc_macro_data(&self, makro: ProcMacroId) -> Arc<ProcMacroData>;
+ #[salsa::tracked]
+ fn static_signature(&self, e: StaticId) -> Arc<StaticSignature> {
+ self.static_signature_with_source_map(e).0
+ }
- #[salsa::invoke_actual(ExternCrateDeclData::extern_crate_decl_data_query)]
- fn extern_crate_decl_data(&self, extern_crate: ExternCrateId) -> Arc<ExternCrateDeclData>;
+ #[salsa::tracked]
+ fn function_signature(&self, e: FunctionId) -> Arc<FunctionSignature> {
+ self.function_signature_with_source_map(e).0
+ }
+
+ #[salsa::tracked]
+ fn trait_alias_signature(&self, e: TraitAliasId) -> Arc<TraitAliasSignature> {
+ self.trait_alias_signature_with_source_map(e).0
+ }
+
+ #[salsa::tracked]
+ fn type_alias_signature(&self, e: TypeAliasId) -> Arc<TypeAliasSignature> {
+ self.type_alias_signature_with_source_map(e).0
+ }
+
+ #[salsa::invoke_actual(TraitSignature::query)]
+ fn trait_signature_with_source_map(
+ &self,
+ trait_: TraitId,
+ ) -> (Arc<TraitSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(ImplSignature::query)]
+ fn impl_signature_with_source_map(
+ &self,
+ impl_: ImplId,
+ ) -> (Arc<ImplSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(StructSignature::query)]
+ fn struct_signature_with_source_map(
+ &self,
+ struct_: StructId,
+ ) -> (Arc<StructSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(UnionSignature::query)]
+ fn union_signature_with_source_map(
+ &self,
+ union_: UnionId,
+ ) -> (Arc<UnionSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(EnumSignature::query)]
+ fn enum_signature_with_source_map(
+ &self,
+ e: EnumId,
+ ) -> (Arc<EnumSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(ConstSignature::query)]
+ fn const_signature_with_source_map(
+ &self,
+ e: ConstId,
+ ) -> (Arc<ConstSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(StaticSignature::query)]
+ fn static_signature_with_source_map(
+ &self,
+ e: StaticId,
+ ) -> (Arc<StaticSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(FunctionSignature::query)]
+ fn function_signature_with_source_map(
+ &self,
+ e: FunctionId,
+ ) -> (Arc<FunctionSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(TraitAliasSignature::query)]
+ fn trait_alias_signature_with_source_map(
+ &self,
+ e: TraitAliasId,
+ ) -> (Arc<TraitAliasSignature>, Arc<ExpressionStoreSourceMap>);
+
+ #[salsa::invoke_actual(TypeAliasSignature::query)]
+ fn type_alias_signature_with_source_map(
+ &self,
+ e: TypeAliasId,
+ ) -> (Arc<TypeAliasSignature>, Arc<ExpressionStoreSourceMap>);
// endregion:data
@@ -231,15 +292,23 @@ pub trait DefDatabase:
#[salsa::invoke_actual(ExprScopes::expr_scopes_query)]
fn expr_scopes(&self, def: DefWithBodyId) -> Arc<ExprScopes>;
- #[salsa::invoke_actual(GenericParams::generic_params_query)]
+ #[salsa::transparent]
+ #[salsa::invoke(GenericParams::new)]
fn generic_params(&self, def: GenericDefId) -> Arc<GenericParams>;
- /// If this returns `None` for the source map, that means it is the same as with the item tree.
- #[salsa::invoke_actual(GenericParams::generic_params_with_source_map_query)]
- fn generic_params_with_source_map(
+ #[salsa::transparent]
+ #[salsa::invoke(GenericParams::generic_params_and_store)]
+ fn generic_params_and_store(
&self,
def: GenericDefId,
- ) -> (Arc<GenericParams>, Option<Arc<TypesSourceMap>>);
+ ) -> (Arc<GenericParams>, Arc<ExpressionStore>);
+
+ #[salsa::transparent]
+ #[salsa::invoke(GenericParams::generic_params_and_store_and_source_map)]
+ fn generic_params_and_store_and_source_map(
+ &self,
+ def: GenericDefId,
+ ) -> (Arc<GenericParams>, Arc<ExpressionStore>, Arc<ExpressionStoreSourceMap>);
// region:attrs
@@ -270,16 +339,20 @@ pub trait DefDatabase:
// region:visibilities
- #[salsa::invoke(visibility::field_visibilities_query)]
+ #[salsa::invoke_actual(visibility::field_visibilities_query)]
fn field_visibilities(&self, var: VariantId) -> Arc<ArenaMap<LocalFieldId, Visibility>>;
// FIXME: unify function_visibility and const_visibility?
+
#[salsa::invoke_actual(visibility::function_visibility_query)]
fn function_visibility(&self, def: FunctionId) -> Visibility;
#[salsa::invoke_actual(visibility::const_visibility_query)]
fn const_visibility(&self, def: ConstId) -> Visibility;
+ #[salsa::invoke_actual(visibility::type_alias_visibility_query)]
+ fn type_alias_visibility(&self, def: TypeAliasId) -> Visibility;
+
// endregion:visibilities
#[salsa::invoke_actual(LangItems::crate_lang_items_query)]