More accurate span for anonymous argument suggestion

Use smaller span for suggesting adding `_:` ahead of a type:

```
error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)`
  --> $DIR/anon-params-denied-2018.rs:12:47
   |
LL |     fn foo_with_qualified_path(<Bar as T>::Baz);
   |                                               ^ expected one of 8 possible tokens
   |
   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: explicitly ignore the parameter name
   |
LL |     fn foo_with_qualified_path(_: <Bar as T>::Baz);
   |                                ++
```
This commit is contained in:
Esteban Küber 2024-07-10 22:11:51 +00:00
parent 032be6f7bb
commit f6c4679547
2 changed files with 10 additions and 10 deletions

View File

@ -2240,11 +2240,11 @@ pub(super) fn parameter_without_type(
} }
_ => { _ => {
// Otherwise, try to get a type and emit a suggestion. // Otherwise, try to get a type and emit a suggestion.
if let Some(ty) = pat.to_ty() { if let Some(_) = pat.to_ty() {
err.span_suggestion_verbose( err.span_suggestion_verbose(
pat.span, pat.span.shrink_to_lo(),
"explicitly ignore the parameter name", "explicitly ignore the parameter name",
format!("_: {}", pprust::ty_to_string(&ty)), "_: ".to_string(),
Applicability::MachineApplicable, Applicability::MachineApplicable,
); );
err.note(rfc_note); err.note(rfc_note);
@ -2256,7 +2256,7 @@ pub(super) fn parameter_without_type(
// `fn foo(a, b) {}`, `fn foo(a<x>, b<y>) {}` or `fn foo(usize, usize) {}` // `fn foo(a, b) {}`, `fn foo(a<x>, b<y>) {}` or `fn foo(usize, usize) {}`
if first_param { if first_param {
err.span_suggestion( err.span_suggestion_verbose(
self_span, self_span,
"if this is a `self` type, give it a parameter name", "if this is a `self` type, give it a parameter name",
self_sugg, self_sugg,
@ -2266,14 +2266,14 @@ pub(super) fn parameter_without_type(
// Avoid suggesting that `fn foo(HashMap<u32>)` is fixed with a change to // Avoid suggesting that `fn foo(HashMap<u32>)` is fixed with a change to
// `fn foo(HashMap: TypeName<u32>)`. // `fn foo(HashMap: TypeName<u32>)`.
if self.token != token::Lt { if self.token != token::Lt {
err.span_suggestion( err.span_suggestion_verbose(
param_span, param_span,
"if this is a parameter name, give it a type", "if this is a parameter name, give it a type",
param_sugg, param_sugg,
Applicability::HasPlaceholders, Applicability::HasPlaceholders,
); );
} }
err.span_suggestion( err.span_suggestion_verbose(
type_span, type_span,
"if this is a type, explicitly ignore the parameter name", "if this is a type, explicitly ignore the parameter name",
type_sugg, type_sugg,

View File

@ -48,7 +48,7 @@ LL | fn foo_with_qualified_path(<Bar as T>::Baz);
help: explicitly ignore the parameter name help: explicitly ignore the parameter name
| |
LL | fn foo_with_qualified_path(_: <Bar as T>::Baz); LL | fn foo_with_qualified_path(_: <Bar as T>::Baz);
| ~~~~~~~~~~~~~~~~~~ | ++
error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)` error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)`
--> $DIR/anon-params-denied-2018.rs:15:56 --> $DIR/anon-params-denied-2018.rs:15:56
@ -60,7 +60,7 @@ LL | fn foo_with_qualified_path_and_ref(&<Bar as T>::Baz);
help: explicitly ignore the parameter name help: explicitly ignore the parameter name
| |
LL | fn foo_with_qualified_path_and_ref(_: &<Bar as T>::Baz); LL | fn foo_with_qualified_path_and_ref(_: &<Bar as T>::Baz);
| ~~~~~~~~~~~~~~~~~~~ | ++
error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `,` error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `,`
--> $DIR/anon-params-denied-2018.rs:18:57 --> $DIR/anon-params-denied-2018.rs:18:57
@ -72,7 +72,7 @@ LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, <Bar as T>::Baz);
help: explicitly ignore the parameter name help: explicitly ignore the parameter name
| |
LL | fn foo_with_multiple_qualified_paths(_: <Bar as T>::Baz, <Bar as T>::Baz); LL | fn foo_with_multiple_qualified_paths(_: <Bar as T>::Baz, <Bar as T>::Baz);
| ~~~~~~~~~~~~~~~~~~ | ++
error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)` error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)`
--> $DIR/anon-params-denied-2018.rs:18:74 --> $DIR/anon-params-denied-2018.rs:18:74
@ -84,7 +84,7 @@ LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, <Bar as T>::Baz);
help: explicitly ignore the parameter name help: explicitly ignore the parameter name
| |
LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, _: <Bar as T>::Baz); LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, _: <Bar as T>::Baz);
| ~~~~~~~~~~~~~~~~~~ | ++
error: expected one of `:`, `@`, or `|`, found `,` error: expected one of `:`, `@`, or `|`, found `,`
--> $DIR/anon-params-denied-2018.rs:22:36 --> $DIR/anon-params-denied-2018.rs:22:36