aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/db.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-11-30 11:35:37 +0000
committerFlorian Diebold <[email protected]>2019-11-30 11:57:32 +0000
commitcf6809645e2327e20edd30eb535d4f06fa116b5c (patch)
treed39c0827865f5e82d82da94bc595580ad811502b /crates/ra_hir_ty/src/db.rs
parent7cecd0f331419439417f98d92b839c9aaa06ed86 (diff)
Handle cycles in impl types better
- impl Trait<Self> for S is allowed - impl Trait for S<Self> is an invalid cycle, but we can add cycle recovery for it in Salsa now
Diffstat (limited to 'crates/ra_hir_ty/src/db.rs')
-rw-r--r--crates/ra_hir_ty/src/db.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs
index 9ce154593..6ecc0b096 100644
--- a/crates/ra_hir_ty/src/db.rs
+++ b/crates/ra_hir_ty/src/db.rs
@@ -11,7 +11,7 @@ use ra_db::{salsa, CrateId};
11use crate::{ 11use crate::{
12 method_resolution::CrateImplBlocks, 12 method_resolution::CrateImplBlocks,
13 traits::{AssocTyValue, Impl}, 13 traits::{AssocTyValue, Impl},
14 CallableDef, FnSig, GenericPredicate, ImplTy, InferenceResult, Substs, Ty, TyDefId, TypeCtor, 14 CallableDef, FnSig, GenericPredicate, InferenceResult, Substs, TraitRef, Ty, TyDefId, TypeCtor,
15 ValueTyDefId, 15 ValueTyDefId,
16}; 16};
17 17
@@ -27,8 +27,12 @@ pub trait HirDatabase: DefDatabase {
27 #[salsa::invoke(crate::lower::value_ty_query)] 27 #[salsa::invoke(crate::lower::value_ty_query)]
28 fn value_ty(&self, def: ValueTyDefId) -> Ty; 28 fn value_ty(&self, def: ValueTyDefId) -> Ty;
29 29
30 #[salsa::invoke(crate::lower::impl_ty_query)] 30 #[salsa::invoke(crate::lower::impl_self_ty_query)]
31 fn impl_ty(&self, def: ImplId) -> ImplTy; 31 #[salsa::cycle(crate::lower::impl_self_ty_recover)]
32 fn impl_self_ty(&self, def: ImplId) -> Ty;
33
34 #[salsa::invoke(crate::lower::impl_trait_query)]
35 fn impl_trait(&self, def: ImplId) -> Option<TraitRef>;
32 36
33 #[salsa::invoke(crate::lower::field_types_query)] 37 #[salsa::invoke(crate::lower::field_types_query)]
34 fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalStructFieldId, Ty>>; 38 fn field_types(&self, var: VariantId) -> Arc<ArenaMap<LocalStructFieldId, Ty>>;