More accurate span for type parameter suggestion

After:

```
error[E0229]: associated item constraints are not allowed here
  --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:3:10
   |
LL | impl Foo<T: Default> for String {}
   |          ^^^^^^^^^^ associated item constraint not allowed here
   |
help: declare the type parameter right after the `impl` keyword
   |
LL - impl Foo<T: Default> for String {}
LL + impl<T: Default> Foo<T> for String {}
   |
```

Before:

```
error[E0229]: associated item constraints are not allowed here
  --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:3:10
   |
LL | impl Foo<T: Default> for String {}
   |          ^^^^^^^^^^ associated item constraint not allowed here
   |
help: declare the type parameter right after the `impl` keyword
   |
LL | impl<T: Default> Foo<T> for String {}
   |     ++++++++++++     ~
```
This commit is contained in:
Esteban Küber 2024-07-10 02:28:09 +00:00
parent 032be6f7bb
commit be9d961884
2 changed files with 23 additions and 15 deletions

View File

@ -1340,11 +1340,13 @@ pub fn prohibit_assoc_item_constraint(
format!("<{lifetimes}{type_with_constraints}>"), format!("<{lifetimes}{type_with_constraints}>"),
) )
}; };
let suggestions = let suggestions = vec![
vec![param_decl, (constraint.span, format!("{}", matching_param.name))]; param_decl,
(constraint.span.with_lo(constraint.ident.span.hi()), String::new()),
];
err.multipart_suggestion_verbose( err.multipart_suggestion_verbose(
format!("declare the type parameter right after the `impl` keyword"), "declare the type parameter right after the `impl` keyword",
suggestions, suggestions,
Applicability::MaybeIncorrect, Applicability::MaybeIncorrect,
); );

View File

@ -14,8 +14,9 @@ LL | impl Foo<T: Default> for String {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<T: Default> Foo<T> for String {} LL - impl Foo<T: Default> for String {}
| ++++++++++++ ~ LL + impl<T: Default> Foo<T> for String {}
|
error[E0229]: associated item constraints are not allowed here error[E0229]: associated item constraints are not allowed here
--> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:7:10 --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:7:10
@ -25,8 +26,9 @@ LL | impl Foo<T: 'a + Default> for u8 {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<'a, T: 'a + Default> Foo<T> for u8 {} LL - impl Foo<T: 'a + Default> for u8 {}
| +++++++++++++++++++++ ~ LL + impl<'a, T: 'a + Default> Foo<T> for u8 {}
|
error[E0229]: associated item constraints are not allowed here error[E0229]: associated item constraints are not allowed here
--> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:13:13 --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:13:13
@ -36,8 +38,9 @@ LL | impl<T> Foo<T: Default> for u16 {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<T, T: Default> Foo<T> for u16 {} LL - impl<T> Foo<T: Default> for u16 {}
| ++++++++++++ ~ LL + impl<T, T: Default> Foo<T> for u16 {}
|
error[E0229]: associated item constraints are not allowed here error[E0229]: associated item constraints are not allowed here
--> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:17:14 --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:17:14
@ -47,8 +50,9 @@ LL | impl<'a> Foo<T: 'a + Default> for u32 {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<'a, 'a, T: 'a + Default> Foo<T> for u32 {} LL - impl<'a> Foo<T: 'a + Default> for u32 {}
| +++++++++++++++++++++ ~ LL + impl<'a, 'a, T: 'a + Default> Foo<T> for u32 {}
|
error[E0229]: associated item constraints are not allowed here error[E0229]: associated item constraints are not allowed here
--> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:23:10 --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:23:10
@ -58,8 +62,9 @@ LL | impl Bar<T: Default, K: Default> for String {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<T: Default> Bar<T, K: Default> for String {} LL - impl Bar<T: Default, K: Default> for String {}
| ++++++++++++ ~ LL + impl<T: Default> Bar<T, K: Default> for String {}
|
error[E0107]: trait takes 2 generic arguments but 1 generic argument was supplied error[E0107]: trait takes 2 generic arguments but 1 generic argument was supplied
--> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:27:9 --> $DIR/impl-block-params-declared-in-wrong-spot-issue-113073.rs:27:9
@ -87,8 +92,9 @@ LL | impl<T> Bar<T, K: Default> for u8 {}
| |
help: declare the type parameter right after the `impl` keyword help: declare the type parameter right after the `impl` keyword
| |
LL | impl<T, K: Default> Bar<T, K> for u8 {} LL - impl<T> Bar<T, K: Default> for u8 {}
| ++++++++++++ ~ LL + impl<T, K: Default> Bar<T, K> for u8 {}
|
error: aborting due to 8 previous errors error: aborting due to 8 previous errors