diff options
Diffstat (limited to 'crates/ra_hir_ty/src/db.rs')
-rw-r--r-- | crates/ra_hir_ty/src/db.rs | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs deleted file mode 100644 index c773adc67..000000000 --- a/crates/ra_hir_ty/src/db.rs +++ /dev/null | |||
@@ -1,159 +0,0 @@ | |||
1 | //! FIXME: write short doc here | ||
2 | |||
3 | use std::sync::Arc; | ||
4 | |||
5 | use hir_def::{ | ||
6 | db::DefDatabase, expr::ExprId, DefWithBodyId, FunctionId, GenericDefId, ImplId, LocalFieldId, | ||
7 | TypeParamId, VariantId, | ||
8 | }; | ||
9 | use ra_arena::map::ArenaMap; | ||
10 | use ra_db::{impl_intern_key, salsa, CrateId, Upcast}; | ||
11 | use ra_prof::profile; | ||
12 | |||
13 | use crate::{ | ||
14 | method_resolution::{InherentImpls, TraitImpls}, | ||
15 | traits::chalk, | ||
16 | Binders, CallableDefId, GenericPredicate, InferenceResult, OpaqueTyId, PolyFnSig, | ||
17 | ReturnTypeImplTraits, TraitRef, Ty, TyDefId, ValueTyDefId, | ||
18 | }; | ||
19 | use hir_expand::name::Name; | ||
20 | |||
21 | #[salsa::query_group(HirDatabaseStorage)] | ||
22 | pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> { | ||
23 | #[salsa::invoke(infer_wait)] | ||
24 | #[salsa::transparent] | ||
25 | fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>; | ||
26 | |||
27 | #[salsa::invoke(crate::infer::infer_query)] | ||
28 | fn infer_query(&self, def: DefWithBodyId) -> Arc<InferenceResult>; | ||
29 | |||
30 | #[salsa::invoke(crate::lower::ty_query)] | ||
31 | #[salsa::cycle(crate::lower::ty_recover)] | ||
32 | fn ty(&self, def: TyDefId) -> Binders<Ty>; | ||
33 | |||
34 | #[salsa::invoke(crate::lower::value_ty_query)] | ||
35 | fn value_ty(&self, def: ValueTyDefId) -> Binders<Ty>; | ||
36 | |||
37 | #[salsa::invoke(crate::lower::impl_self_ty_query)] | ||
38 | #[salsa::cycle(crate::lower::impl_self_ty_recover)] | ||
39 | fn impl_self_ty(&self, def: ImplId) -> Binders<Ty>; | ||
40 | |||
41 | #[salsa::invoke(crate::lower::impl_trait_query)] | ||
42 | fn impl_trait(&self, def: ImplId) -> Option<Binders<TraitRef>>; | ||
43 | |||
44 | #[salsa::invoke(crate::lower::field_types_query)] | ||
45 | fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalFieldId, Binders<Ty>>>; | ||
46 | |||
47 | #[salsa::invoke(crate::callable_item_sig)] | ||
48 | fn callable_item_signature(&self, def: CallableDefId) -> PolyFnSig; | ||
49 | |||
50 | #[salsa::invoke(crate::lower::return_type_impl_traits)] | ||
51 | fn return_type_impl_traits( | ||
52 | &self, | ||
53 | def: FunctionId, | ||
54 | ) -> Option<Arc<Binders<ReturnTypeImplTraits>>>; | ||
55 | |||
56 | #[salsa::invoke(crate::lower::generic_predicates_for_param_query)] | ||
57 | #[salsa::cycle(crate::lower::generic_predicates_for_param_recover)] | ||
58 | fn generic_predicates_for_param( | ||
59 | &self, | ||
60 | param_id: TypeParamId, | ||
61 | ) -> Arc<[Binders<GenericPredicate>]>; | ||
62 | |||
63 | #[salsa::invoke(crate::lower::generic_predicates_query)] | ||
64 | fn generic_predicates(&self, def: GenericDefId) -> Arc<[Binders<GenericPredicate>]>; | ||
65 | |||
66 | #[salsa::invoke(crate::lower::generic_defaults_query)] | ||
67 | fn generic_defaults(&self, def: GenericDefId) -> Arc<[Binders<Ty>]>; | ||
68 | |||
69 | #[salsa::invoke(InherentImpls::inherent_impls_in_crate_query)] | ||
70 | fn inherent_impls_in_crate(&self, krate: CrateId) -> Arc<InherentImpls>; | ||
71 | |||
72 | #[salsa::invoke(TraitImpls::trait_impls_in_crate_query)] | ||
73 | fn trait_impls_in_crate(&self, krate: CrateId) -> Arc<TraitImpls>; | ||
74 | |||
75 | #[salsa::invoke(TraitImpls::trait_impls_in_deps_query)] | ||
76 | fn trait_impls_in_deps(&self, krate: CrateId) -> Arc<TraitImpls>; | ||
77 | |||
78 | // Interned IDs for Chalk integration | ||
79 | #[salsa::interned] | ||
80 | fn intern_callable_def(&self, callable_def: CallableDefId) -> InternedCallableDefId; | ||
81 | #[salsa::interned] | ||
82 | fn intern_type_param_id(&self, param_id: TypeParamId) -> GlobalTypeParamId; | ||
83 | #[salsa::interned] | ||
84 | fn intern_impl_trait_id(&self, id: OpaqueTyId) -> InternedOpaqueTyId; | ||
85 | #[salsa::interned] | ||
86 | fn intern_closure(&self, id: (DefWithBodyId, ExprId)) -> ClosureId; | ||
87 | |||
88 | #[salsa::invoke(chalk::associated_ty_data_query)] | ||
89 | fn associated_ty_data(&self, id: chalk::AssocTypeId) -> Arc<chalk::AssociatedTyDatum>; | ||
90 | |||
91 | #[salsa::invoke(chalk::trait_datum_query)] | ||
92 | fn trait_datum(&self, krate: CrateId, trait_id: chalk::TraitId) -> Arc<chalk::TraitDatum>; | ||
93 | |||
94 | #[salsa::invoke(chalk::struct_datum_query)] | ||
95 | fn struct_datum(&self, krate: CrateId, struct_id: chalk::AdtId) -> Arc<chalk::StructDatum>; | ||
96 | |||
97 | #[salsa::invoke(crate::traits::chalk::impl_datum_query)] | ||
98 | fn impl_datum(&self, krate: CrateId, impl_id: chalk::ImplId) -> Arc<chalk::ImplDatum>; | ||
99 | |||
100 | #[salsa::invoke(crate::traits::chalk::fn_def_datum_query)] | ||
101 | fn fn_def_datum(&self, krate: CrateId, fn_def_id: chalk::FnDefId) -> Arc<chalk::FnDefDatum>; | ||
102 | |||
103 | #[salsa::invoke(crate::traits::chalk::associated_ty_value_query)] | ||
104 | fn associated_ty_value( | ||
105 | &self, | ||
106 | krate: CrateId, | ||
107 | id: chalk::AssociatedTyValueId, | ||
108 | ) -> Arc<chalk::AssociatedTyValue>; | ||
109 | |||
110 | #[salsa::invoke(crate::traits::trait_solve_query)] | ||
111 | fn trait_solve( | ||
112 | &self, | ||
113 | krate: CrateId, | ||
114 | goal: crate::Canonical<crate::InEnvironment<crate::Obligation>>, | ||
115 | ) -> Option<crate::traits::Solution>; | ||
116 | |||
117 | #[salsa::invoke(crate::traits::chalk::program_clauses_for_chalk_env_query)] | ||
118 | fn program_clauses_for_chalk_env( | ||
119 | &self, | ||
120 | krate: CrateId, | ||
121 | env: chalk_ir::Environment<chalk::Interner>, | ||
122 | ) -> chalk_ir::ProgramClauses<chalk::Interner>; | ||
123 | } | ||
124 | |||
125 | fn infer_wait(db: &impl HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> { | ||
126 | let _p = profile("infer:wait").detail(|| match def { | ||
127 | DefWithBodyId::FunctionId(it) => db.function_data(it).name.to_string(), | ||
128 | DefWithBodyId::StaticId(it) => { | ||
129 | db.static_data(it).name.clone().unwrap_or_else(Name::missing).to_string() | ||
130 | } | ||
131 | DefWithBodyId::ConstId(it) => { | ||
132 | db.const_data(it).name.clone().unwrap_or_else(Name::missing).to_string() | ||
133 | } | ||
134 | }); | ||
135 | db.infer_query(def) | ||
136 | } | ||
137 | |||
138 | #[test] | ||
139 | fn hir_database_is_object_safe() { | ||
140 | fn _assert_object_safe(_: &dyn HirDatabase) {} | ||
141 | } | ||
142 | |||
143 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
144 | pub struct GlobalTypeParamId(salsa::InternId); | ||
145 | impl_intern_key!(GlobalTypeParamId); | ||
146 | |||
147 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
148 | pub struct InternedOpaqueTyId(salsa::InternId); | ||
149 | impl_intern_key!(InternedOpaqueTyId); | ||
150 | |||
151 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] | ||
152 | pub struct ClosureId(salsa::InternId); | ||
153 | impl_intern_key!(ClosureId); | ||
154 | |||
155 | /// This exists just for Chalk, because Chalk just has a single `FnDefId` where | ||
156 | /// we have different IDs for struct and enum variant constructors. | ||
157 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Ord, PartialOrd)] | ||
158 | pub struct InternedCallableDefId(salsa::InternId); | ||
159 | impl_intern_key!(InternedCallableDefId); | ||