]> git.lizzy.rs Git - rust.git/blob - crates/ra_hir/src/db.rs
189649841a7e4b583ff5452b52e85250a1de376e
[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(HirDatabaseStorage)]
23 pub trait HirDatabase: 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(crate::ty::infer)]
40     fn infer(&self, func: Function) -> Arc<InferenceResult>;
41
42     #[salsa::invoke(crate::ty::type_for_def)]
43     fn type_for_def(&self, def: TypableDef) -> Ty;
44
45     #[salsa::invoke(crate::ty::type_for_field)]
46     fn type_for_field(&self, field: StructField) -> Ty;
47
48     #[salsa::invoke(query_definitions::file_items)]
49     fn file_items(&self, file_id: HirFileId) -> Arc<SourceFileItems>;
50
51     #[salsa::invoke(query_definitions::file_item)]
52     fn file_item(&self, source_item_id: SourceItemId) -> TreeArc<SyntaxNode>;
53
54     #[salsa::invoke(crate::module_tree::Submodule::submodules_query)]
55     fn submodules(
56         &self,
57         file_id: HirFileId,
58         delc_id: Option<SourceFileItemId>,
59     ) -> Arc<Vec<crate::module_tree::Submodule>>;
60
61     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_query)]
62     fn lower_module(&self, module: Module) -> (Arc<LoweredModule>, Arc<ImportSourceMap>);
63
64     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_module_query)]
65     fn lower_module_module(&self, module: Module) -> Arc<LoweredModule>;
66
67     #[salsa::invoke(crate::nameres::lower::LoweredModule::lower_module_source_map_query)]
68     fn lower_module_source_map(&self, module: Module) -> Arc<ImportSourceMap>;
69
70     #[salsa::invoke(crate::nameres::ItemMap::item_map_query)]
71     fn item_map(&self, krate: Crate) -> Arc<ItemMap>;
72
73     #[salsa::invoke(crate::module_tree::ModuleTree::module_tree_query)]
74     fn module_tree(&self, krate: Crate) -> Arc<ModuleTree>;
75
76     #[salsa::invoke(crate::impl_block::impls_in_module_with_source_map_query)]
77     fn impls_in_module_with_source_map(
78         &self,
79         module: Module,
80     ) -> (Arc<ModuleImplBlocks>, Arc<ImplSourceMap>);
81
82     #[salsa::invoke(crate::impl_block::impls_in_module)]
83     fn impls_in_module(&self, module: Module) -> Arc<ModuleImplBlocks>;
84
85     #[salsa::invoke(crate::impl_block::impls_in_module_source_map_query)]
86     fn impls_in_module_source_map(&self, module: Module) -> Arc<ImplSourceMap>;
87
88     #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)]
89     fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>;
90
91     #[salsa::invoke(crate::expr::body_hir)]
92     fn body_hir(&self, func: Function) -> Arc<crate::expr::Body>;
93
94     #[salsa::invoke(crate::expr::body_syntax_mapping)]
95     fn body_syntax_mapping(&self, func: Function) -> Arc<crate::expr::BodySyntaxMapping>;
96
97     #[salsa::invoke(crate::generics::GenericParams::generic_params_query)]
98     fn generic_params(&self, def: GenericDef) -> Arc<GenericParams>;
99
100     #[salsa::invoke(crate::FnSignature::fn_signature_query)]
101     fn fn_signature(&self, func: Function) -> Arc<FnSignature>;
102 }