aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_ty/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_ty/src/lib.rs')
-rw-r--r--crates/hir_ty/src/lib.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/crates/hir_ty/src/lib.rs b/crates/hir_ty/src/lib.rs
index 815bb8418..ad908f957 100644
--- a/crates/hir_ty/src/lib.rs
+++ b/crates/hir_ty/src/lib.rs
@@ -940,10 +940,19 @@ impl Ty {
940 let param_data = &generic_params.types[id.local_id]; 940 let param_data = &generic_params.types[id.local_id];
941 match param_data.provenance { 941 match param_data.provenance {
942 hir_def::generics::TypeParamProvenance::ArgumentImplTrait => { 942 hir_def::generics::TypeParamProvenance::ArgumentImplTrait => {
943 let substs = Substitution::type_params(db, id.parent);
943 let predicates = db 944 let predicates = db
944 .generic_predicates_for_param(id) 945 .generic_predicates(id.parent)
945 .into_iter() 946 .into_iter()
946 .map(|pred| pred.value.clone()) 947 .map(|pred| pred.clone().subst(&substs))
948 .filter(|wc| match &wc {
949 WhereClause::Implemented(tr) => tr.self_type_parameter() == self,
950 WhereClause::AliasEq(AliasEq {
951 alias: AliasTy::Projection(proj),
952 ty: _,
953 }) => proj.self_type_parameter() == self,
954 _ => false,
955 })
947 .collect_vec(); 956 .collect_vec();
948 957
949 Some(predicates) 958 Some(predicates)