Skip to content

Commit

Permalink
Account for single where bound being removed
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Jan 22, 2024
1 parent c85bb27 commit 29bdf9e
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5123,8 +5123,24 @@ fn point_at_assoc_type_restriction(
{
// The following block is to determine the right span to delete for this bound
// that will leave valid code after the suggestion is applied.
let span = if let Some(hir::WherePredicate::BoundPredicate(next)) =
predicates.peek()
let span = if pred.origin == hir::PredicateOrigin::WhereClause
&& generics
.predicates
.iter()
.filter(|p| {
matches!(
p,
hir::WherePredicate::BoundPredicate(p)
if hir::PredicateOrigin::WhereClause == p.origin
)
})
.count()
== 1
{
// There's only one `where` bound, that needs to be removed. Remove the whole
// `where` clause.
generics.where_clause_span
} else if let Some(hir::WherePredicate::BoundPredicate(next)) = predicates.peek()
&& pred.origin == next.origin
{
// There's another bound, include the comma for the current one.
Expand Down Expand Up @@ -5174,7 +5190,7 @@ fn point_at_assoc_type_restriction(
err.span_suggestion_verbose(
path.span,
"replace the associated type with the type specified in this `impl`",
format!("{}", tcx.type_of(new.def_id).skip_binder(),),
tcx.type_of(new.def_id).skip_binder().to_string(),
Applicability::MachineApplicable,
);
}
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/associated-types/impl-wf-cycle-2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ LL | Self::A: Copy,
| ---- unsatisfied trait bound introduced here
help: associated type for the current `impl` cannot be restricted in `where` clauses, remove this bound
|
LL - where
LL - Self::A: Copy,
LL +
|

error: aborting due to 1 previous error
Expand Down
3 changes: 1 addition & 2 deletions tests/ui/associated-types/impl-wf-cycle-6.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ impl Grault for () {

impl<T: Grault> Grault for (T,)
//~^ ERROR overflow evaluating the requirement `<(T,) as Grault>::A == _`
where


{
type A = ();
type B = bool;
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/associated-types/impl-wf-cycle-6.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ LL | Self::A: Baz,
| --- unsatisfied trait bound introduced here
help: associated type for the current `impl` cannot be restricted in `where` clauses, remove this bound
|
LL - where
LL - Self::A: Baz,
LL +
|

error: aborting due to 1 previous error
Expand Down

0 comments on commit 29bdf9e

Please sign in to comment.