diff options
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r-- | crates/ra_hir/src/db.rs | 79 |
1 files changed, 24 insertions, 55 deletions
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index a9982a70f..b034d4e44 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs | |||
@@ -2,80 +2,46 @@ | |||
2 | 2 | ||
3 | use std::sync::Arc; | 3 | use std::sync::Arc; |
4 | 4 | ||
5 | use hir_def::attr::Attr; | 5 | use ra_arena::map::ArenaMap; |
6 | use ra_db::salsa; | 6 | use ra_db::salsa; |
7 | use ra_syntax::SmolStr; | ||
8 | 7 | ||
9 | use crate::{ | 8 | use crate::{ |
10 | debug::HirDebugDatabase, | ||
11 | generics::GenericDef, | ||
12 | ids, | ||
13 | lang_item::{LangItemTarget, LangItems}, | ||
14 | ty::{ | 9 | ty::{ |
15 | method_resolution::CrateImplBlocks, | 10 | method_resolution::CrateImplBlocks, |
16 | traits::{AssocTyValue, Impl}, | 11 | traits::{AssocTyValue, Impl}, |
17 | CallableDef, FnSig, GenericPredicate, InferenceResult, Namespace, Substs, Ty, TypableDef, | 12 | CallableDef, FnSig, GenericPredicate, InferenceResult, Namespace, Substs, Ty, TypableDef, |
18 | TypeCtor, | 13 | TypeCtor, |
19 | }, | 14 | }, |
20 | type_alias::TypeAliasData, | 15 | Crate, DefWithBody, ImplBlock, Trait, |
21 | Const, ConstData, Crate, DefWithBody, FnData, Function, ImplBlock, Module, Static, StructField, | ||
22 | Trait, TypeAlias, | ||
23 | }; | 16 | }; |
24 | 17 | ||
25 | pub use hir_def::db::{ | 18 | pub use hir_def::{ |
26 | BodyQuery, BodyWithSourceMapQuery, CrateDefMapQuery, DefDatabase2, DefDatabase2Storage, | 19 | db::{ |
27 | EnumDataQuery, ExprScopesQuery, GenericParamsQuery, ImplDataQuery, InternDatabase, | 20 | BodyQuery, BodyWithSourceMapQuery, ConstDataQuery, CrateDefMapQuery, CrateLangItemsQuery, |
28 | InternDatabaseStorage, RawItemsQuery, RawItemsWithSourceMapQuery, StructDataQuery, | 21 | DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery, ExprScopesQuery, |
29 | TraitDataQuery, | 22 | FunctionDataQuery, GenericParamsQuery, ImplDataQuery, InternDatabase, |
23 | InternDatabaseStorage, LangItemQuery, ModuleLangItemsQuery, RawItemsQuery, | ||
24 | RawItemsWithSourceMapQuery, StaticDataQuery, StructDataQuery, TraitDataQuery, | ||
25 | TypeAliasDataQuery, | ||
26 | }, | ||
27 | GenericDefId, LocalStructFieldId, VariantId, | ||
30 | }; | 28 | }; |
31 | pub use hir_expand::db::{ | 29 | pub use hir_expand::db::{ |
32 | AstDatabase, AstDatabaseStorage, AstIdMapQuery, MacroArgQuery, MacroDefQuery, MacroExpandQuery, | 30 | AstDatabase, AstDatabaseStorage, AstIdMapQuery, MacroArgQuery, MacroDefQuery, MacroExpandQuery, |
33 | ParseMacroQuery, | 31 | ParseMacroQuery, |
34 | }; | 32 | }; |
35 | 33 | ||
36 | // This database uses `AstDatabase` internally, | ||
37 | #[salsa::query_group(DefDatabaseStorage)] | ||
38 | #[salsa::requires(AstDatabase)] | ||
39 | pub trait DefDatabase: HirDebugDatabase + DefDatabase2 { | ||
40 | #[salsa::invoke(FnData::fn_data_query)] | ||
41 | fn fn_data(&self, func: Function) -> Arc<FnData>; | ||
42 | |||
43 | #[salsa::invoke(TypeAliasData::type_alias_data_query)] | ||
44 | fn type_alias_data(&self, typ: TypeAlias) -> Arc<TypeAliasData>; | ||
45 | |||
46 | #[salsa::invoke(ConstData::const_data_query)] | ||
47 | fn const_data(&self, konst: Const) -> Arc<ConstData>; | ||
48 | |||
49 | #[salsa::invoke(ConstData::static_data_query)] | ||
50 | fn static_data(&self, konst: Static) -> Arc<ConstData>; | ||
51 | |||
52 | #[salsa::invoke(LangItems::module_lang_items_query)] | ||
53 | fn module_lang_items(&self, module: Module) -> Option<Arc<LangItems>>; | ||
54 | |||
55 | #[salsa::invoke(LangItems::crate_lang_items_query)] | ||
56 | fn crate_lang_items(&self, krate: Crate) -> Arc<LangItems>; | ||
57 | |||
58 | #[salsa::invoke(LangItems::lang_item_query)] | ||
59 | fn lang_item(&self, start_crate: Crate, item: SmolStr) -> Option<LangItemTarget>; | ||
60 | |||
61 | #[salsa::invoke(crate::code_model::docs::documentation_query)] | ||
62 | fn documentation(&self, def: crate::DocDef) -> Option<crate::Documentation>; | ||
63 | |||
64 | #[salsa::invoke(crate::code_model::attrs::attributes_query)] | ||
65 | fn attrs(&self, def: crate::AttrDef) -> Option<Arc<[Attr]>>; | ||
66 | } | ||
67 | |||
68 | #[salsa::query_group(HirDatabaseStorage)] | 34 | #[salsa::query_group(HirDatabaseStorage)] |
69 | #[salsa::requires(salsa::Database)] | 35 | #[salsa::requires(salsa::Database)] |
70 | pub trait HirDatabase: DefDatabase + AstDatabase { | 36 | pub trait HirDatabase: DefDatabase { |
71 | #[salsa::invoke(crate::ty::infer_query)] | 37 | #[salsa::invoke(crate::ty::infer_query)] |
72 | fn infer(&self, def: DefWithBody) -> Arc<InferenceResult>; | 38 | fn infer(&self, def: DefWithBody) -> Arc<InferenceResult>; |
73 | 39 | ||
74 | #[salsa::invoke(crate::ty::type_for_def)] | 40 | #[salsa::invoke(crate::ty::type_for_def)] |
75 | fn type_for_def(&self, def: TypableDef, ns: Namespace) -> Ty; | 41 | fn type_for_def(&self, def: TypableDef, ns: Namespace) -> Ty; |
76 | 42 | ||
77 | #[salsa::invoke(crate::ty::type_for_field)] | 43 | #[salsa::invoke(crate::ty::field_types_query)] |
78 | fn type_for_field(&self, field: StructField) -> Ty; | 44 | fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalStructFieldId, Ty>>; |
79 | 45 | ||
80 | #[salsa::invoke(crate::ty::callable_item_sig)] | 46 | #[salsa::invoke(crate::ty::callable_item_sig)] |
81 | fn callable_item_signature(&self, def: CallableDef) -> FnSig; | 47 | fn callable_item_signature(&self, def: CallableDef) -> FnSig; |
@@ -83,15 +49,15 @@ pub trait HirDatabase: DefDatabase + AstDatabase { | |||
83 | #[salsa::invoke(crate::ty::generic_predicates_for_param_query)] | 49 | #[salsa::invoke(crate::ty::generic_predicates_for_param_query)] |
84 | fn generic_predicates_for_param( | 50 | fn generic_predicates_for_param( |
85 | &self, | 51 | &self, |
86 | def: GenericDef, | 52 | def: GenericDefId, |
87 | param_idx: u32, | 53 | param_idx: u32, |
88 | ) -> Arc<[GenericPredicate]>; | 54 | ) -> Arc<[GenericPredicate]>; |
89 | 55 | ||
90 | #[salsa::invoke(crate::ty::generic_predicates_query)] | 56 | #[salsa::invoke(crate::ty::generic_predicates_query)] |
91 | fn generic_predicates(&self, def: GenericDef) -> Arc<[GenericPredicate]>; | 57 | fn generic_predicates(&self, def: GenericDefId) -> Arc<[GenericPredicate]>; |
92 | 58 | ||
93 | #[salsa::invoke(crate::ty::generic_defaults_query)] | 59 | #[salsa::invoke(crate::ty::generic_defaults_query)] |
94 | fn generic_defaults(&self, def: GenericDef) -> Substs; | 60 | fn generic_defaults(&self, def: GenericDefId) -> Substs; |
95 | 61 | ||
96 | #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)] | 62 | #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)] |
97 | fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>; | 63 | fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>; |
@@ -109,11 +75,14 @@ pub trait HirDatabase: DefDatabase + AstDatabase { | |||
109 | 75 | ||
110 | // Interned IDs for Chalk integration | 76 | // Interned IDs for Chalk integration |
111 | #[salsa::interned] | 77 | #[salsa::interned] |
112 | fn intern_type_ctor(&self, type_ctor: TypeCtor) -> ids::TypeCtorId; | 78 | fn intern_type_ctor(&self, type_ctor: TypeCtor) -> crate::ty::TypeCtorId; |
113 | #[salsa::interned] | 79 | #[salsa::interned] |
114 | fn intern_chalk_impl(&self, impl_: Impl) -> ids::GlobalImplId; | 80 | fn intern_chalk_impl(&self, impl_: Impl) -> crate::ty::traits::GlobalImplId; |
115 | #[salsa::interned] | 81 | #[salsa::interned] |
116 | fn intern_assoc_ty_value(&self, assoc_ty_value: AssocTyValue) -> ids::AssocTyValueId; | 82 | fn intern_assoc_ty_value( |
83 | &self, | ||
84 | assoc_ty_value: AssocTyValue, | ||
85 | ) -> crate::ty::traits::AssocTyValueId; | ||
117 | 86 | ||
118 | #[salsa::invoke(crate::ty::traits::chalk::associated_ty_data_query)] | 87 | #[salsa::invoke(crate::ty::traits::chalk::associated_ty_data_query)] |
119 | fn associated_ty_data( | 88 | fn associated_ty_data( |