diff options
author | Florian Diebold <[email protected]> | 2021-03-21 16:40:14 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2021-03-21 17:01:14 +0000 |
commit | 1d5c4a77fb33cab7bf8f9d2edc6dd26b09ef65f3 (patch) | |
tree | 9cc37c708ec3c2df8adbc1e96204c7a7e2e3ca65 /crates/hir_ty/src/lower.rs | |
parent | 590c41635952e19c3caae525a827499dbd360049 (diff) |
Use QuantifiedWhereClause in generic_predicates as well
Still far too much binder skipping going on; I find it hard to imagine
this is all correct, but the tests pass.
Diffstat (limited to 'crates/hir_ty/src/lower.rs')
-rw-r--r-- | crates/hir_ty/src/lower.rs | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/crates/hir_ty/src/lower.rs b/crates/hir_ty/src/lower.rs index 45591e920..f60cec649 100644 --- a/crates/hir_ty/src/lower.rs +++ b/crates/hir_ty/src/lower.rs | |||
@@ -825,7 +825,7 @@ pub fn associated_type_shorthand_candidates<R>( | |||
825 | let predicates = db.generic_predicates_for_param(param_id); | 825 | let predicates = db.generic_predicates_for_param(param_id); |
826 | let mut traits_: Vec<_> = predicates | 826 | let mut traits_: Vec<_> = predicates |
827 | .iter() | 827 | .iter() |
828 | .filter_map(|pred| match &pred.value { | 828 | .filter_map(|pred| match &pred.value.value { |
829 | WhereClause::Implemented(tr) => Some(tr.clone()), | 829 | WhereClause::Implemented(tr) => Some(tr.clone()), |
830 | _ => None, | 830 | _ => None, |
831 | }) | 831 | }) |
@@ -898,10 +898,7 @@ pub(crate) fn field_types_query( | |||
898 | pub(crate) fn generic_predicates_for_param_query( | 898 | pub(crate) fn generic_predicates_for_param_query( |
899 | db: &dyn HirDatabase, | 899 | db: &dyn HirDatabase, |
900 | param_id: TypeParamId, | 900 | param_id: TypeParamId, |
901 | ) -> Arc<[Binders<WhereClause>]> { | 901 | ) -> Arc<[Binders<QuantifiedWhereClause>]> { |
902 | // FIXME: these binders are for the type parameters of the def. We need to | ||
903 | // introduce another level of binders for quantified where clauses (for<'a> | ||
904 | // ...) | ||
905 | let resolver = param_id.parent.resolver(db.upcast()); | 902 | let resolver = param_id.parent.resolver(db.upcast()); |
906 | let ctx = | 903 | let ctx = |
907 | TyLoweringContext::new(db, &resolver).with_type_param_mode(TypeParamLoweringMode::Variable); | 904 | TyLoweringContext::new(db, &resolver).with_type_param_mode(TypeParamLoweringMode::Variable); |
@@ -920,7 +917,7 @@ pub(crate) fn generic_predicates_for_param_query( | |||
920 | WherePredicate::Lifetime { .. } => false, | 917 | WherePredicate::Lifetime { .. } => false, |
921 | }) | 918 | }) |
922 | .flat_map(|pred| { | 919 | .flat_map(|pred| { |
923 | ctx.lower_where_predicate(pred, true).map(|p| Binders::new(generics.len(), p.value)) | 920 | ctx.lower_where_predicate(pred, true).map(|p| Binders::new(generics.len(), p)) |
924 | }) | 921 | }) |
925 | .collect() | 922 | .collect() |
926 | } | 923 | } |
@@ -929,7 +926,7 @@ pub(crate) fn generic_predicates_for_param_recover( | |||
929 | _db: &dyn HirDatabase, | 926 | _db: &dyn HirDatabase, |
930 | _cycle: &[String], | 927 | _cycle: &[String], |
931 | _param_id: &TypeParamId, | 928 | _param_id: &TypeParamId, |
932 | ) -> Arc<[Binders<WhereClause>]> { | 929 | ) -> Arc<[Binders<QuantifiedWhereClause>]> { |
933 | Arc::new([]) | 930 | Arc::new([]) |
934 | } | 931 | } |
935 | 932 | ||
@@ -984,10 +981,7 @@ pub(crate) fn trait_environment_query( | |||
984 | pub(crate) fn generic_predicates_query( | 981 | pub(crate) fn generic_predicates_query( |
985 | db: &dyn HirDatabase, | 982 | db: &dyn HirDatabase, |
986 | def: GenericDefId, | 983 | def: GenericDefId, |
987 | ) -> Arc<[Binders<WhereClause>]> { | 984 | ) -> Arc<[Binders<QuantifiedWhereClause>]> { |
988 | // FIXME: these binders are for the type parameters of the def. We need to | ||
989 | // introduce another level of binders for quantified where clauses (for<'a> | ||
990 | // ...) | ||
991 | let resolver = def.resolver(db.upcast()); | 985 | let resolver = def.resolver(db.upcast()); |
992 | let ctx = | 986 | let ctx = |
993 | TyLoweringContext::new(db, &resolver).with_type_param_mode(TypeParamLoweringMode::Variable); | 987 | TyLoweringContext::new(db, &resolver).with_type_param_mode(TypeParamLoweringMode::Variable); |
@@ -995,7 +989,7 @@ pub(crate) fn generic_predicates_query( | |||
995 | resolver | 989 | resolver |
996 | .where_predicates_in_scope() | 990 | .where_predicates_in_scope() |
997 | .flat_map(|pred| { | 991 | .flat_map(|pred| { |
998 | ctx.lower_where_predicate(pred, false).map(|p| Binders::new(generics.len(), p.value)) | 992 | ctx.lower_where_predicate(pred, false).map(|p| Binders::new(generics.len(), p)) |
999 | }) | 993 | }) |
1000 | .collect() | 994 | .collect() |
1001 | } | 995 | } |