]> git.lizzy.rs Git - rust.git/blob - crates/ra_hir/src/db.rs
split hirdatabase
[rust.git] / crates / ra_hir / src / db.rs
1 use std::sync::Arc;
2
3 use ra_syntax::{SyntaxNode, TreeArc, SourceFile};
4 use ra_db::{SourceDatabase, salsa};
5
6 use crate::{
7     MacroCallId, HirFileId,
8     SourceFileItems, SourceItemId, Crate, Module, HirInterner,
9     query_definitions,
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,
20 };
21
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>;
26
27     #[salsa::invoke(crate::macros::expand_macro_invocation)]
28     fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option<Arc<MacroExpansion>>;
29
30     #[salsa::invoke(ExprScopes::expr_scopes_query)]
31     fn expr_scopes(&self, func: Function) -> Arc<ExprScopes>;
32
33     #[salsa::invoke(crate::adt::StructData::struct_data_query)]
34     fn struct_data(&self, s: Struct) -> Arc<StructData>;
35
36     #[salsa::invoke(crate::adt::EnumData::enum_data_query)]
37     fn enum_data(&self, e: Enum) -> Arc<EnumData>;
38
39     #[salsa::invoke(query_definitions::file_items)]
40     fn file_items(&self, file_id: HirFileId) -> Arc<SourceFileItems>;
41
42     #[salsa::invoke(crate::module_tree::Submodule::submodules_query)]
43     fn submodules(
44         &self,
45         file_id: HirFileId,
46         delc_id: Option<SourceFileItemId>,
47     ) -> Arc<Vec<crate::module_tree::Submodule>>;
48
49     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_query)]
50     fn lower_module(&self, module: Module) -> (Arc<LoweredModule>, Arc<ImportSourceMap>);
51
52     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_module_query)]
53     fn lower_module_module(&self, module: Module) -> Arc<LoweredModule>;
54
55     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_source_map_query)]
56     fn lower_module_source_map(&self, module: Module) -> Arc<ImportSourceMap>;
57
58     #[salsa::invoke(crate::nameres::ItemMap::item_map_query)]
59     fn item_map(&self, krate: Crate) -> Arc<ItemMap>;
60
61     #[salsa::invoke(crate::module_tree::ModuleTree::module_tree_query)]
62     fn module_tree(&self, krate: Crate) -> Arc<ModuleTree>;
63
64     #[salsa::invoke(crate::impl_block::impls_in_module_with_source_map_query)]
65     fn impls_in_module_with_source_map(
66         &self,
67         module: Module,
68     ) -> (Arc<ModuleImplBlocks>, Arc<ImplSourceMap>);
69
70     #[salsa::invoke(crate::impl_block::impls_in_module)]
71     fn impls_in_module(&self, module: Module) -> Arc<ModuleImplBlocks>;
72
73     #[salsa::invoke(crate::impl_block::impls_in_module_source_map_query)]
74     fn impls_in_module_source_map(&self, module: Module) -> Arc<ImplSourceMap>;
75
76     #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)]
77     fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>;
78
79     #[salsa::invoke(crate::generics::GenericParams::generic_params_query)]
80     fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>;
81
82     #[salsa::invoke(crate::FnSignature::fn_signature_query)]
83     fn fn_signature(&self, func: Function) -> Arc<FnSignature>;
84 }
85
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>;
90
91     #[salsa::invoke(query_definitions::file_item)]
92     fn file_item(&self, source_item_id: SourceItemId) -> TreeArc<SyntaxNode>;
93
94     #[salsa::invoke(crate::ty::infer)]
95     fn infer(&self, func: Function) -> Arc<InferenceResult>;
96
97     #[salsa::invoke(crate::ty::type_for_def)]
98     fn type_for_def(&self, def: TypableDef) -> Ty;
99
100     #[salsa::invoke(crate::ty::type_for_field)]
101     fn type_for_field(&self, field: StructField) -> Ty;
102
103     #[salsa::invoke(crate::expr::body_hir)]
104     fn body_hir(&self, func: Function) -> Arc<crate::expr::Body>;
105
106     #[salsa::invoke(crate::expr::body_syntax_mapping)]
107     fn body_syntax_mapping(&self, func: Function) -> Arc<crate::expr::BodySyntaxMapping>;
108 }