aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r--crates/ra_hir/src/db.rs79
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
3use std::sync::Arc; 3use std::sync::Arc;
4 4
5use hir_def::attr::Attr; 5use ra_arena::map::ArenaMap;
6use ra_db::salsa; 6use ra_db::salsa;
7use ra_syntax::SmolStr;
8 7
9use crate::{ 8use 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
25pub use hir_def::db::{ 18pub 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};
31pub use hir_expand::db::{ 29pub 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)]
39pub 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)]
70pub trait HirDatabase: DefDatabase + AstDatabase { 36pub 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(