3 use ra_syntax::{SyntaxNode, TreeArc, SourceFile};
4 use ra_db::{SourceDatabase, salsa};
7 MacroCallId, HirFileId,
8 SourceFileItems, SourceItemId, Crate, Module, HirInterner,
10 Function, FnSignature, ExprScopes,
11 Struct, Enum, StructField,
12 macros::MacroExpansion,
13 module_tree::ModuleTree,
14 nameres::{ItemMap, lower::{LoweredModule, ImportSourceMap}},
15 ty::{InferenceResult, Ty, method_resolution::CrateImplBlocks, TypableDef},
16 adt::{StructData, EnumData},
17 impl_block::{ModuleImplBlocks, ImplSourceMap},
18 generics::{GenericParams, GenericDef},
19 ids::SourceFileItemId,
22 #[salsa::query_group(PersistentHirDatabaseStorage)]
23 pub trait PersistentHirDatabase: SourceDatabase + AsRef<HirInterner> {
24 #[salsa::invoke(HirFileId::hir_parse)]
25 fn hir_parse(&self, file_id: HirFileId) -> TreeArc<SourceFile>;
27 #[salsa::invoke(crate::macros::expand_macro_invocation)]
28 fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option<Arc<MacroExpansion>>;
30 #[salsa::invoke(ExprScopes::expr_scopes_query)]
31 fn expr_scopes(&self, func: Function) -> Arc<ExprScopes>;
33 #[salsa::invoke(crate::adt::StructData::struct_data_query)]
34 fn struct_data(&self, s: Struct) -> Arc<StructData>;
36 #[salsa::invoke(crate::adt::EnumData::enum_data_query)]
37 fn enum_data(&self, e: Enum) -> Arc<EnumData>;
39 #[salsa::invoke(query_definitions::file_items)]
40 fn file_items(&self, file_id: HirFileId) -> Arc<SourceFileItems>;
42 #[salsa::invoke(crate::module_tree::Submodule::submodules_query)]
46 delc_id: Option<SourceFileItemId>,
47 ) -> Arc<Vec<crate::module_tree::Submodule>>;
49 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_query)]
50 fn lower_module(&self, module: Module) -> (Arc<LoweredModule>, Arc<ImportSourceMap>);
52 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_module_query)]
53 fn lower_module_module(&self, module: Module) -> Arc<LoweredModule>;
55 #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_source_map_query)]
56 fn lower_module_source_map(&self, module: Module) -> Arc<ImportSourceMap>;
58 #[salsa::invoke(crate::nameres::ItemMap::item_map_query)]
59 fn item_map(&self, krate: Crate) -> Arc<ItemMap>;
61 #[salsa::invoke(crate::module_tree::ModuleTree::module_tree_query)]
62 fn module_tree(&self, krate: Crate) -> Arc<ModuleTree>;
64 #[salsa::invoke(crate::impl_block::impls_in_module_with_source_map_query)]
65 fn impls_in_module_with_source_map(
68 ) -> (Arc<ModuleImplBlocks>, Arc<ImplSourceMap>);
70 #[salsa::invoke(crate::impl_block::impls_in_module)]
71 fn impls_in_module(&self, module: Module) -> Arc<ModuleImplBlocks>;
73 #[salsa::invoke(crate::impl_block::impls_in_module_source_map_query)]
74 fn impls_in_module_source_map(&self, module: Module) -> Arc<ImplSourceMap>;
76 #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)]
77 fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>;
79 #[salsa::invoke(crate::generics::GenericParams::generic_params_query)]
80 fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>;
82 #[salsa::invoke(crate::FnSignature::fn_signature_query)]
83 fn fn_signature(&self, func: Function) -> Arc<FnSignature>;
86 #[salsa::query_group(HirDatabaseStorage)]
87 pub trait HirDatabase: PersistentHirDatabase {
88 #[salsa::invoke(query_definitions::fn_scopes)]
89 fn fn_scopes(&self, func: Function) -> Arc<FnScopes>;
91 #[salsa::invoke(query_definitions::file_item)]
92 fn file_item(&self, source_item_id: SourceItemId) -> TreeArc<SyntaxNode>;
94 #[salsa::invoke(crate::ty::infer)]
95 fn infer(&self, func: Function) -> Arc<InferenceResult>;
97 #[salsa::invoke(crate::ty::type_for_def)]
98 fn type_for_def(&self, def: TypableDef) -> Ty;
100 #[salsa::invoke(crate::ty::type_for_field)]
101 fn type_for_field(&self, field: StructField) -> Ty;
103 #[salsa::invoke(crate::expr::body_hir)]
104 fn body_hir(&self, func: Function) -> Arc<crate::expr::Body>;
106 #[salsa::invoke(crate::expr::body_syntax_mapping)]
107 fn body_syntax_mapping(&self, func: Function) -> Arc<crate::expr::BodySyntaxMapping>;