3 use ra_syntax::{SyntaxNode, TreeArc, SourceFile};
4 use ra_db::{SourceDatabase, salsa};
7 MacroCallId, HirFileId,
8 SourceFileItems, SourceItemId, Crate, Module, HirInterner,
9 Function, FnSignature, ExprScopes,
10 Struct, Enum, StructField,
11 macros::MacroExpansion,
12 module_tree::ModuleTree,
13 nameres::{ItemMap, lower::{LoweredModule, ImportSourceMap}},
14 ty::{InferenceResult, Ty, method_resolution::CrateImplBlocks, TypableDef},
15 adt::{StructData, EnumData},
16 impl_block::{ModuleImplBlocks, ImplSourceMap},
17 generics::{GenericParams, GenericDef},
18 ids::SourceFileItemId, nameres::Namespace, type_ref::TypeRef, code_model_api::Type
21 #[salsa::query_group(PersistentHirDatabaseStorage)]
22 pub trait PersistentHirDatabase: SourceDatabase + AsRef<HirInterner> {
23 #[salsa::invoke(HirFileId::hir_parse)]
24 fn hir_parse(&self, file_id: HirFileId) -> TreeArc<SourceFile>;
26 #[salsa::invoke(crate::macros::expand_macro_invocation)]
27 fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option<Arc<MacroExpansion>>;
29 #[salsa::invoke(crate::adt::StructData::struct_data_query)]
30 fn struct_data(&self, s: Struct) -> Arc<StructData>;
32 #[salsa::invoke(crate::adt::EnumData::enum_data_query)]
33 fn enum_data(&self, e: Enum) -> Arc<EnumData>;
35 #[salsa::invoke(crate::ids::SourceFileItems::file_items_query)]
36 fn file_items(&self, file_id: HirFileId) -> Arc<SourceFileItems>;
38 #[salsa::invoke(crate::ids::SourceFileItems::file_item_query)]
39 fn file_item(&self, source_item_id: SourceItemId) -> TreeArc<SyntaxNode>;
41 #[salsa::invoke(crate::module_tree::Submodule::submodules_query)]
45 delc_id: Option<SourceFileItemId>,
46 ) -> Arc<Vec<crate::module_tree::Submodule>>;
48 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_query)]
49 fn lower_module(&self, module: Module) -> (Arc<LoweredModule>, Arc<ImportSourceMap>);
51 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_module_query)]
52 fn lower_module_module(&self, module: Module) -> Arc<LoweredModule>;
54 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_source_map_query)]
55 fn lower_module_source_map(&self, module: Module) -> Arc<ImportSourceMap>;
57 #[salsa::invoke(crate::nameres::ItemMap::item_map_query)]
58 fn item_map(&self, krate: Crate) -> Arc<ItemMap>;
60 #[salsa::invoke(crate::module_tree::ModuleTree::module_tree_query)]
61 fn module_tree(&self, krate: Crate) -> Arc<ModuleTree>;
63 #[salsa::invoke(crate::impl_block::impls_in_module)]
64 fn impls_in_module(&self, module: Module) -> Arc<ModuleImplBlocks>;
66 #[salsa::invoke(crate::impl_block::impls_in_module_source_map_query)]
67 fn impls_in_module_source_map(&self, module: Module) -> Arc<ImplSourceMap>;
69 #[salsa::invoke(crate::impl_block::impls_in_module_with_source_map_query)]
70 fn impls_in_module_with_source_map(
73 ) -> (Arc<ModuleImplBlocks>, Arc<ImplSourceMap>);
75 #[salsa::invoke(crate::generics::GenericParams::generic_params_query)]
76 fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>;
78 #[salsa::invoke(crate::FnSignature::fn_signature_query)]
79 fn fn_signature(&self, func: Function) -> Arc<FnSignature>;
81 #[salsa::invoke(crate::type_alias::type_alias_ref_query)]
82 fn type_alias_ref(&self, typ: Type) -> Arc<TypeRef>;
85 #[salsa::query_group(HirDatabaseStorage)]
86 pub trait HirDatabase: PersistentHirDatabase {
87 #[salsa::invoke(ExprScopes::expr_scopes_query)]
88 fn expr_scopes(&self, func: Function) -> Arc<ExprScopes>;
90 #[salsa::invoke(crate::ty::infer)]
91 fn infer(&self, func: Function) -> Arc<InferenceResult>;
93 #[salsa::invoke(crate::ty::type_for_def)]
94 fn type_for_def(&self, def: TypableDef, ns: Namespace) -> Ty;
96 #[salsa::invoke(crate::ty::type_for_field)]
97 fn type_for_field(&self, field: StructField) -> Ty;
99 #[salsa::invoke(crate::expr::body_hir)]
100 fn body_hir(&self, func: Function) -> Arc<crate::expr::Body>;
102 #[salsa::invoke(crate::expr::body_syntax_mapping)]
103 fn body_syntax_mapping(&self, func: Function) -> Arc<crate::expr::BodySyntaxMapping>;
105 #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)]
106 fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>;
110 fn hir_database_is_object_safe() {
111 fn _assert_object_safe(_: &dyn HirDatabase) {}