Account for single where bound being removed

This commit is contained in:
Esteban Küber 2024-01-04 00:39:56 +00:00
parent c85bb274f6
commit 29bdf9ea51
4 changed files with 22 additions and 7 deletions

View File

@ -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.
@ -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,
);
}

View File

@ -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

View File

@ -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;

View File

@ -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