diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/hir_ty/src/display.rs | 12 | ||||
-rw-r--r-- | crates/hir_ty/src/lib.rs | 11 | ||||
-rw-r--r-- | crates/hir_ty/src/lower.rs | 7 | ||||
-rw-r--r-- | crates/hir_ty/src/tests/traits.rs | 4 | ||||
-rw-r--r-- | crates/hir_ty/src/traits.rs | 1 | ||||
-rw-r--r-- | crates/hir_ty/src/traits/chalk.rs | 8 | ||||
-rw-r--r-- | crates/hir_ty/src/traits/chalk/mapping.rs | 7 |
7 files changed, 8 insertions, 42 deletions
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs index 2721b8312..4765c99a4 100644 --- a/crates/hir_ty/src/display.rs +++ b/crates/hir_ty/src/display.rs | |||
@@ -731,16 +731,6 @@ fn write_bounds_like_dyn_trait( | |||
731 | } | 731 | } |
732 | ty.hir_fmt(f)?; | 732 | ty.hir_fmt(f)?; |
733 | } | 733 | } |
734 | WhereClause::Error => { | ||
735 | if angle_open { | ||
736 | // impl Trait<X, {error}> | ||
737 | write!(f, ", ")?; | ||
738 | } else if !first { | ||
739 | // impl Trait + {error} | ||
740 | write!(f, " + ")?; | ||
741 | } | ||
742 | p.hir_fmt(f)?; | ||
743 | } | ||
744 | } | 734 | } |
745 | first = false; | 735 | first = false; |
746 | } | 736 | } |
@@ -796,7 +786,7 @@ impl HirDisplay for WhereClause { | |||
796 | )?; | 786 | )?; |
797 | ty.hir_fmt(f)?; | 787 | ty.hir_fmt(f)?; |
798 | } | 788 | } |
799 | WhereClause::AliasEq(_) | WhereClause::Error => write!(f, "{{error}}")?, | 789 | WhereClause::AliasEq(_) => write!(f, "{{error}}")?, |
800 | } | 790 | } |
801 | Ok(()) | 791 | Ok(()) |
802 | } | 792 | } |
diff --git a/crates/hir_ty/src/lib.rs b/crates/hir_ty/src/lib.rs index 5c4d5a7d7..8de2d422f 100644 --- a/crates/hir_ty/src/lib.rs +++ b/crates/hir_ty/src/lib.rs | |||
@@ -569,16 +569,9 @@ pub enum WhereClause { | |||
569 | Implemented(TraitRef), | 569 | Implemented(TraitRef), |
570 | /// An associated type bindings like in `Iterator<Item = T>`. | 570 | /// An associated type bindings like in `Iterator<Item = T>`. |
571 | AliasEq(AliasEq), | 571 | AliasEq(AliasEq), |
572 | /// We couldn't resolve the trait reference. (If some type parameters can't | ||
573 | /// be resolved, they will just be Unknown). | ||
574 | Error, | ||
575 | } | 572 | } |
576 | 573 | ||
577 | impl WhereClause { | 574 | impl WhereClause { |
578 | pub fn is_error(&self) -> bool { | ||
579 | matches!(self, WhereClause::Error) | ||
580 | } | ||
581 | |||
582 | pub fn is_implemented(&self) -> bool { | 575 | pub fn is_implemented(&self) -> bool { |
583 | matches!(self, WhereClause::Implemented(_)) | 576 | matches!(self, WhereClause::Implemented(_)) |
584 | } | 577 | } |
@@ -589,7 +582,7 @@ impl WhereClause { | |||
589 | WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(proj), .. }) => { | 582 | WhereClause::AliasEq(AliasEq { alias: AliasTy::Projection(proj), .. }) => { |
590 | Some(proj.trait_ref(db)) | 583 | Some(proj.trait_ref(db)) |
591 | } | 584 | } |
592 | WhereClause::AliasEq(_) | WhereClause::Error => None, | 585 | WhereClause::AliasEq(_) => None, |
593 | } | 586 | } |
594 | } | 587 | } |
595 | } | 588 | } |
@@ -599,7 +592,6 @@ impl TypeWalk for WhereClause { | |||
599 | match self { | 592 | match self { |
600 | WhereClause::Implemented(trait_ref) => trait_ref.walk(f), | 593 | WhereClause::Implemented(trait_ref) => trait_ref.walk(f), |
601 | WhereClause::AliasEq(alias_eq) => alias_eq.walk(f), | 594 | WhereClause::AliasEq(alias_eq) => alias_eq.walk(f), |
602 | WhereClause::Error => {} | ||
603 | } | 595 | } |
604 | } | 596 | } |
605 | 597 | ||
@@ -611,7 +603,6 @@ impl TypeWalk for WhereClause { | |||
611 | match self { | 603 | match self { |
612 | WhereClause::Implemented(trait_ref) => trait_ref.walk_mut_binders(f, binders), | 604 | WhereClause::Implemented(trait_ref) => trait_ref.walk_mut_binders(f, binders), |
613 | WhereClause::AliasEq(alias_eq) => alias_eq.walk_mut_binders(f, binders), | 605 | WhereClause::AliasEq(alias_eq) => alias_eq.walk_mut_binders(f, binders), |
614 | WhereClause::Error => {} | ||
615 | } | 606 | } |
616 | } | 607 | } |
617 | } | 608 | } |
diff --git a/crates/hir_ty/src/lower.rs b/crates/hir_ty/src/lower.rs index 4199dc7a6..cbbb535e5 100644 --- a/crates/hir_ty/src/lower.rs +++ b/crates/hir_ty/src/lower.rs | |||
@@ -703,10 +703,10 @@ impl<'a> TyLoweringContext<'a> { | |||
703 | let trait_ref = match bound { | 703 | let trait_ref = match bound { |
704 | TypeBound::Path(path) => { | 704 | TypeBound::Path(path) => { |
705 | bindings = self.lower_trait_ref_from_path(path, Some(self_ty)); | 705 | bindings = self.lower_trait_ref_from_path(path, Some(self_ty)); |
706 | Some(bindings.clone().map_or(WhereClause::Error, WhereClause::Implemented)) | 706 | bindings.clone().map(WhereClause::Implemented) |
707 | } | 707 | } |
708 | TypeBound::Lifetime(_) => None, | 708 | TypeBound::Lifetime(_) => None, |
709 | TypeBound::Error => Some(WhereClause::Error), | 709 | TypeBound::Error => None, |
710 | }; | 710 | }; |
711 | trait_ref.into_iter().chain( | 711 | trait_ref.into_iter().chain( |
712 | bindings | 712 | bindings |
@@ -919,9 +919,6 @@ pub(crate) fn trait_environment_query( | |||
919 | let mut clauses = Vec::new(); | 919 | let mut clauses = Vec::new(); |
920 | for pred in resolver.where_predicates_in_scope() { | 920 | for pred in resolver.where_predicates_in_scope() { |
921 | for pred in ctx.lower_where_predicate(pred) { | 921 | for pred in ctx.lower_where_predicate(pred) { |
922 | if pred.is_error() { | ||
923 | continue; | ||
924 | } | ||
925 | if let WhereClause::Implemented(tr) = &pred { | 922 | if let WhereClause::Implemented(tr) = &pred { |
926 | traits_in_scope.push((tr.self_type_parameter().clone(), tr.hir_trait_id())); | 923 | traits_in_scope.push((tr.self_type_parameter().clone(), tr.hir_trait_id())); |
927 | } | 924 | } |
diff --git a/crates/hir_ty/src/tests/traits.rs b/crates/hir_ty/src/tests/traits.rs index 8270fa219..8f2bdffc0 100644 --- a/crates/hir_ty/src/tests/traits.rs +++ b/crates/hir_ty/src/tests/traits.rs | |||
@@ -1412,8 +1412,8 @@ fn weird_bounds() { | |||
1412 | 50..51 'b': impl | 1412 | 50..51 'b': impl |
1413 | 69..70 'c': impl Trait | 1413 | 69..70 'c': impl Trait |
1414 | 86..87 'd': impl | 1414 | 86..87 'd': impl |
1415 | 107..108 'e': impl {error} | 1415 | 107..108 'e': impl |
1416 | 123..124 'f': impl Trait + {error} | 1416 | 123..124 'f': impl Trait |
1417 | 147..149 '{}': () | 1417 | 147..149 '{}': () |
1418 | "#]], | 1418 | "#]], |
1419 | ); | 1419 | ); |
diff --git a/crates/hir_ty/src/traits.rs b/crates/hir_ty/src/traits.rs index 6feb64ceb..87c92bd12 100644 --- a/crates/hir_ty/src/traits.rs +++ b/crates/hir_ty/src/traits.rs | |||
@@ -100,7 +100,6 @@ impl Obligation { | |||
100 | match predicate { | 100 | match predicate { |
101 | WhereClause::Implemented(trait_ref) => Some(Obligation::Trait(trait_ref)), | 101 | WhereClause::Implemented(trait_ref) => Some(Obligation::Trait(trait_ref)), |
102 | WhereClause::AliasEq(alias_eq) => Some(Obligation::AliasEq(alias_eq)), | 102 | WhereClause::AliasEq(alias_eq) => Some(Obligation::AliasEq(alias_eq)), |
103 | WhereClause::Error => None, | ||
104 | } | 103 | } |
105 | } | 104 | } |
106 | } | 105 | } |
diff --git a/crates/hir_ty/src/traits/chalk.rs b/crates/hir_ty/src/traits/chalk.rs index 4144035cd..734679414 100644 --- a/crates/hir_ty/src/traits/chalk.rs +++ b/crates/hir_ty/src/traits/chalk.rs | |||
@@ -187,13 +187,7 @@ impl<'a> chalk_solve::RustIrDatabase<Interner> for ChalkContext<'a> { | |||
187 | let data = &datas.value.impl_traits[idx as usize]; | 187 | let data = &datas.value.impl_traits[idx as usize]; |
188 | let bound = OpaqueTyDatumBound { | 188 | let bound = OpaqueTyDatumBound { |
189 | bounds: make_binders( | 189 | bounds: make_binders( |
190 | data.bounds | 190 | data.bounds.value.iter().cloned().map(|b| b.to_chalk(self.db)).collect(), |
191 | .value | ||
192 | .iter() | ||
193 | .cloned() | ||
194 | .filter(|b| !b.is_error()) | ||
195 | .map(|b| b.to_chalk(self.db)) | ||
196 | .collect(), | ||
197 | 1, | 191 | 1, |
198 | ), | 192 | ), |
199 | where_clauses: make_binders(vec![], 0), | 193 | where_clauses: make_binders(vec![], 0), |
diff --git a/crates/hir_ty/src/traits/chalk/mapping.rs b/crates/hir_ty/src/traits/chalk/mapping.rs index 5756e9754..7841c216c 100644 --- a/crates/hir_ty/src/traits/chalk/mapping.rs +++ b/crates/hir_ty/src/traits/chalk/mapping.rs | |||
@@ -98,7 +98,7 @@ impl ToChalk for Ty { | |||
98 | TyKind::Dyn(predicates) => { | 98 | TyKind::Dyn(predicates) => { |
99 | let where_clauses = chalk_ir::QuantifiedWhereClauses::from_iter( | 99 | let where_clauses = chalk_ir::QuantifiedWhereClauses::from_iter( |
100 | &Interner, | 100 | &Interner, |
101 | predicates.iter().filter(|p| !p.is_error()).cloned().map(|p| p.to_chalk(db)), | 101 | predicates.iter().cloned().map(|p| p.to_chalk(db)), |
102 | ); | 102 | ); |
103 | let bounded_ty = chalk_ir::DynTy { | 103 | let bounded_ty = chalk_ir::DynTy { |
104 | bounds: make_binders(where_clauses, 1), | 104 | bounds: make_binders(where_clauses, 1), |
@@ -318,7 +318,6 @@ impl ToChalk for WhereClause { | |||
318 | chalk_ir::WhereClause::AliasEq(alias_eq.to_chalk(db).shifted_in(&Interner)), | 318 | chalk_ir::WhereClause::AliasEq(alias_eq.to_chalk(db).shifted_in(&Interner)), |
319 | 0, | 319 | 0, |
320 | ), | 320 | ), |
321 | WhereClause::Error => panic!("tried passing GenericPredicate::Error to Chalk"), | ||
322 | } | 321 | } |
323 | } | 322 | } |
324 | 323 | ||
@@ -521,10 +520,6 @@ pub(super) fn convert_where_clauses( | |||
521 | let generic_predicates = db.generic_predicates(def); | 520 | let generic_predicates = db.generic_predicates(def); |
522 | let mut result = Vec::with_capacity(generic_predicates.len()); | 521 | let mut result = Vec::with_capacity(generic_predicates.len()); |
523 | for pred in generic_predicates.iter() { | 522 | for pred in generic_predicates.iter() { |
524 | if pred.value.is_error() { | ||
525 | // skip errored predicates completely | ||
526 | continue; | ||
527 | } | ||
528 | result.push(pred.clone().subst(substs).to_chalk(db)); | 523 | result.push(pred.clone().subst(substs).to_chalk(db)); |
529 | } | 524 | } |
530 | result | 525 | result |