diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2020-03-23 18:46:09 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2020-03-24 11:36:08 -0700 |
| commit | cfeedec823b75a244e2c815d56b073fdd619fff6 (patch) | |
| tree | a834f34b4bd9a607459bde9e271fb4a840baff9f | |
| parent | 374ab25585f0a817fe7bd6986737f12347b12d0b (diff) | |
| download | rust-cfeedec823b75a244e2c815d56b073fdd619fff6.tar.gz rust-cfeedec823b75a244e2c815d56b073fdd619fff6.zip | |
Fix placement of suggested generic param when bounds are present
| -rw-r--r-- | src/librustc_typeck/collect.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/did_you_mean/bad-assoc-ty.stderr | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 8136417de03..7806f7832c1 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -162,8 +162,10 @@ crate fn placeholder_type_error( // `struct S<T>(T);` instead of `struct S<_, T>(T);`. sugg.push((arg.span, (*type_name).to_string())); } else { + let last = generics.iter().last().unwrap(); sugg.push(( - generics.iter().last().unwrap().span.shrink_to_hi(), + // Account for bounds, we want `fn foo<T: E, K>(_: K)` not `fn foo<T, K: E>(_: K)`. + last.bounds_span().unwrap_or(last.span).shrink_to_hi(), format!(", {}", type_name), )); } diff --git a/src/test/ui/did_you_mean/bad-assoc-ty.stderr b/src/test/ui/did_you_mean/bad-assoc-ty.stderr index 875c02bae4a..c409ea9c657 100644 --- a/src/test/ui/did_you_mean/bad-assoc-ty.stderr +++ b/src/test/ui/did_you_mean/bad-assoc-ty.stderr @@ -145,8 +145,8 @@ LL | fn foo<X: K<_, _>>(x: X) {} | help: use type parameters instead | -LL | fn foo<X, T: K<T, T>>(x: X) {} - | ^^^ ^ ^ +LL | fn foo<X: K<T, T>, T>(x: X) {} + | ^ ^ ^^^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures --> $DIR/bad-assoc-ty.rs:52:34 @@ -167,8 +167,8 @@ LL | fn baz<F: Fn() -> _>(_: F) {} | help: use type parameters instead | -LL | fn baz<F, T: Fn() -> T>(_: F) {} - | ^^^ ^ +LL | fn baz<F: Fn() -> T, T>(_: F) {} + | ^^^^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures --> $DIR/bad-assoc-ty.rs:58:33 |
