diff options
author | Seivan Heidari <[email protected]> | 2019-11-28 07:19:14 +0000 |
---|---|---|
committer | Seivan Heidari <[email protected]> | 2019-11-28 07:19:14 +0000 |
commit | 18a0937585b836ec5ed054b9ae48e0156ab6d9ef (patch) | |
tree | 9de2c0267ddcc00df717f90034d0843d751a851b /crates/ra_hir/src/db.rs | |
parent | a7394b44c870f585eacfeb3036a33471aff49ff8 (diff) | |
parent | 484acc8a61d599662ed63a4cbda091d38a982551 (diff) |
Merge branch 'master' of https://github.com/rust-analyzer/rust-analyzer into feature/themes
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r-- | crates/ra_hir/src/db.rs | 132 |
1 files changed, 12 insertions, 120 deletions
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 5084bbacf..bfae3660b 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs | |||
@@ -1,130 +1,22 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | 2 | ||
3 | use std::sync::Arc; | 3 | pub use hir_def::db::{ |
4 | 4 | BodyQuery, BodyWithSourceMapQuery, ConstDataQuery, CrateDefMapQuery, CrateLangItemsQuery, | |
5 | use ra_arena::map::ArenaMap; | 5 | DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery, ExprScopesQuery, |
6 | use ra_db::salsa; | 6 | FunctionDataQuery, GenericParamsQuery, ImplDataQuery, InternDatabase, InternDatabaseStorage, |
7 | 7 | LangItemQuery, ModuleLangItemsQuery, RawItemsQuery, RawItemsWithSourceMapQuery, | |
8 | use crate::{ | 8 | StaticDataQuery, StructDataQuery, TraitDataQuery, TypeAliasDataQuery, |
9 | ty::{ | ||
10 | method_resolution::CrateImplBlocks, | ||
11 | traits::{AssocTyValue, Impl}, | ||
12 | CallableDef, FnSig, GenericPredicate, InferenceResult, Namespace, Substs, Ty, TypableDef, | ||
13 | TypeCtor, | ||
14 | }, | ||
15 | Crate, DefWithBody, GenericDef, ImplBlock, Trait, | ||
16 | }; | ||
17 | |||
18 | pub use hir_def::{ | ||
19 | db::{ | ||
20 | BodyQuery, BodyWithSourceMapQuery, ConstDataQuery, CrateDefMapQuery, CrateLangItemsQuery, | ||
21 | DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery, ExprScopesQuery, | ||
22 | FunctionDataQuery, GenericParamsQuery, ImplDataQuery, InternDatabase, | ||
23 | InternDatabaseStorage, LangItemQuery, ModuleLangItemsQuery, RawItemsQuery, | ||
24 | RawItemsWithSourceMapQuery, StaticDataQuery, StructDataQuery, TraitDataQuery, | ||
25 | TypeAliasDataQuery, | ||
26 | }, | ||
27 | LocalStructFieldId, VariantId, | ||
28 | }; | 9 | }; |
29 | pub use hir_expand::db::{ | 10 | pub use hir_expand::db::{ |
30 | AstDatabase, AstDatabaseStorage, AstIdMapQuery, MacroArgQuery, MacroDefQuery, MacroExpandQuery, | 11 | AstDatabase, AstDatabaseStorage, AstIdMapQuery, MacroArgQuery, MacroDefQuery, MacroExpandQuery, |
31 | ParseMacroQuery, | 12 | ParseMacroQuery, |
32 | }; | 13 | }; |
33 | 14 | pub use hir_ty::db::{ | |
34 | #[salsa::query_group(HirDatabaseStorage)] | 15 | AssociatedTyDataQuery, CallableItemSignatureQuery, FieldTypesQuery, GenericDefaultsQuery, |
35 | #[salsa::requires(salsa::Database)] | 16 | GenericPredicatesQuery, HirDatabase, HirDatabaseStorage, ImplDatumQuery, ImplsForTraitQuery, |
36 | pub trait HirDatabase: DefDatabase { | 17 | ImplsInCrateQuery, InferQuery, StructDatumQuery, TraitDatumQuery, TraitSolveQuery, TyQuery, |
37 | #[salsa::invoke(crate::ty::infer_query)] | 18 | ValueTyQuery, |
38 | fn infer(&self, def: DefWithBody) -> Arc<InferenceResult>; | 19 | }; |
39 | |||
40 | #[salsa::invoke(crate::ty::type_for_def)] | ||
41 | fn type_for_def(&self, def: TypableDef, ns: Namespace) -> Ty; | ||
42 | |||
43 | #[salsa::invoke(crate::ty::field_types_query)] | ||
44 | fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalStructFieldId, Ty>>; | ||
45 | |||
46 | #[salsa::invoke(crate::ty::callable_item_sig)] | ||
47 | fn callable_item_signature(&self, def: CallableDef) -> FnSig; | ||
48 | |||
49 | #[salsa::invoke(crate::ty::generic_predicates_for_param_query)] | ||
50 | fn generic_predicates_for_param( | ||
51 | &self, | ||
52 | def: GenericDef, | ||
53 | param_idx: u32, | ||
54 | ) -> Arc<[GenericPredicate]>; | ||
55 | |||
56 | #[salsa::invoke(crate::ty::generic_predicates_query)] | ||
57 | fn generic_predicates(&self, def: GenericDef) -> Arc<[GenericPredicate]>; | ||
58 | |||
59 | #[salsa::invoke(crate::ty::generic_defaults_query)] | ||
60 | fn generic_defaults(&self, def: GenericDef) -> Substs; | ||
61 | |||
62 | #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)] | ||
63 | fn impls_in_crate(&self, krate: Crate) -> Arc<CrateImplBlocks>; | ||
64 | |||
65 | #[salsa::invoke(crate::ty::traits::impls_for_trait_query)] | ||
66 | fn impls_for_trait(&self, krate: Crate, trait_: Trait) -> Arc<[ImplBlock]>; | ||
67 | |||
68 | /// This provides the Chalk trait solver instance. Because Chalk always | ||
69 | /// works from a specific crate, this query is keyed on the crate; and | ||
70 | /// because Chalk does its own internal caching, the solver is wrapped in a | ||
71 | /// Mutex and the query does an untracked read internally, to make sure the | ||
72 | /// cached state is thrown away when input facts change. | ||
73 | #[salsa::invoke(crate::ty::traits::trait_solver_query)] | ||
74 | fn trait_solver(&self, krate: Crate) -> crate::ty::traits::TraitSolver; | ||
75 | |||
76 | // Interned IDs for Chalk integration | ||
77 | #[salsa::interned] | ||
78 | fn intern_type_ctor(&self, type_ctor: TypeCtor) -> crate::ty::TypeCtorId; | ||
79 | #[salsa::interned] | ||
80 | fn intern_chalk_impl(&self, impl_: Impl) -> crate::ty::traits::GlobalImplId; | ||
81 | #[salsa::interned] | ||
82 | fn intern_assoc_ty_value( | ||
83 | &self, | ||
84 | assoc_ty_value: AssocTyValue, | ||
85 | ) -> crate::ty::traits::AssocTyValueId; | ||
86 | |||
87 | #[salsa::invoke(crate::ty::traits::chalk::associated_ty_data_query)] | ||
88 | fn associated_ty_data( | ||
89 | &self, | ||
90 | id: chalk_ir::TypeId, | ||
91 | ) -> Arc<chalk_rust_ir::AssociatedTyDatum<chalk_ir::family::ChalkIr>>; | ||
92 | |||
93 | #[salsa::invoke(crate::ty::traits::chalk::trait_datum_query)] | ||
94 | fn trait_datum( | ||
95 | &self, | ||
96 | krate: Crate, | ||
97 | trait_id: chalk_ir::TraitId, | ||
98 | ) -> Arc<chalk_rust_ir::TraitDatum<chalk_ir::family::ChalkIr>>; | ||
99 | |||
100 | #[salsa::invoke(crate::ty::traits::chalk::struct_datum_query)] | ||
101 | fn struct_datum( | ||
102 | &self, | ||
103 | krate: Crate, | ||
104 | struct_id: chalk_ir::StructId, | ||
105 | ) -> Arc<chalk_rust_ir::StructDatum<chalk_ir::family::ChalkIr>>; | ||
106 | |||
107 | #[salsa::invoke(crate::ty::traits::chalk::impl_datum_query)] | ||
108 | fn impl_datum( | ||
109 | &self, | ||
110 | krate: Crate, | ||
111 | impl_id: chalk_ir::ImplId, | ||
112 | ) -> Arc<chalk_rust_ir::ImplDatum<chalk_ir::family::ChalkIr>>; | ||
113 | |||
114 | #[salsa::invoke(crate::ty::traits::chalk::associated_ty_value_query)] | ||
115 | fn associated_ty_value( | ||
116 | &self, | ||
117 | krate: Crate, | ||
118 | id: chalk_rust_ir::AssociatedTyValueId, | ||
119 | ) -> Arc<chalk_rust_ir::AssociatedTyValue<chalk_ir::family::ChalkIr>>; | ||
120 | |||
121 | #[salsa::invoke(crate::ty::traits::trait_solve_query)] | ||
122 | fn trait_solve( | ||
123 | &self, | ||
124 | krate: Crate, | ||
125 | goal: crate::ty::Canonical<crate::ty::InEnvironment<crate::ty::Obligation>>, | ||
126 | ) -> Option<crate::ty::traits::Solution>; | ||
127 | } | ||
128 | 20 | ||
129 | #[test] | 21 | #[test] |
130 | fn hir_database_is_object_safe() { | 22 | fn hir_database_is_object_safe() { |