Skip to content

Commit

Permalink
Reduce arbitrary self type suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
mu001999 committed Aug 3, 2023
1 parent 8c8af6c commit dce7e87
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 32 deletions.
18 changes: 3 additions & 15 deletions compiler/rustc_parse/src/parser/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2019,7 +2019,7 @@ impl<'a> Parser<'a> {
{
let rfc_note = "anonymous parameters are removed in the 2018 edition (see RFC 1685)";

let (ident, self_sugg, param_sugg, type_sugg, self_span, param_span, type_span, maybe_name) =
let (ident, self_sugg, param_sugg, type_sugg, self_span, param_span, type_span) =
match pat.kind {
PatKind::Ident(_, ident, _) => (
ident,
Expand All @@ -2029,7 +2029,6 @@ impl<'a> Parser<'a> {
pat.span.shrink_to_lo(),
pat.span.shrink_to_hi(),
pat.span.shrink_to_lo(),
true,
),
// Also catches `fn foo(&a)`.
PatKind::Ref(ref inner_pat, mutab)
Expand All @@ -2046,22 +2045,11 @@ impl<'a> Parser<'a> {
pat.span.shrink_to_lo(),
pat.span,
pat.span.shrink_to_lo(),
true,
)
}
_ => unreachable!(),
}
},
PatKind::Path(_, ref path) if let Some(segment) = path.segments.last() => (
segment.ident,
"self: ",
": TypeName".to_string(),
"_: ",
pat.span.shrink_to_lo(),
pat.span.shrink_to_hi(),
pat.span.shrink_to_lo(),
path.segments.len() == 1, // Avoid suggesting that `fn foo(a::b)` is fixed with a change to `fn foo(a::b: TypeName)`.
),
}
_ => {
// Otherwise, try to get a type and emit a suggestion.
if let Some(ty) = pat.to_ty() {
Expand Down Expand Up @@ -2089,7 +2077,7 @@ impl<'a> Parser<'a> {
}
// Avoid suggesting that `fn foo(HashMap<u32>)` is fixed with a change to
// `fn foo(HashMap: TypeName<u32>)`.
if self.token != token::Lt && maybe_name {
if self.token != token::Lt {
err.span_suggestion(
param_span,
"if this is a parameter name, give it a type",
Expand Down
20 changes: 6 additions & 14 deletions tests/ui/anon-params/anon-params-denied-2018.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,10 @@ 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: if this is a `self` type, give it a parameter name
|
LL | fn foo_with_qualified_path(self: <Bar as T>::Baz);
| +++++
help: if this is a type, explicitly ignore the parameter name
help: explicitly ignore the parameter name
|
LL | fn foo_with_qualified_path(_: <Bar as T>::Baz);
| ++
| ~~~~~~~~~~~~~~~~~~

error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)`
--> $DIR/anon-params-denied-2018.rs:15:56
Expand All @@ -73,14 +69,10 @@ LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, <Bar as T>::Baz);
| ^ expected one of 8 possible tokens
|
= note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: if this is a `self` type, give it a parameter name
|
LL | fn foo_with_multiple_qualified_paths(self: <Bar as T>::Baz, <Bar as T>::Baz);
| +++++
help: if this is a type, 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);
| ++
| ~~~~~~~~~~~~~~~~~~

error: expected one of `(`, `...`, `..=`, `..`, `::`, `:`, `{`, or `|`, found `)`
--> $DIR/anon-params-denied-2018.rs:18:74
Expand All @@ -89,10 +81,10 @@ LL | fn foo_with_multiple_qualified_paths(<Bar as T>::Baz, <Bar as T>::Baz);
| ^ expected one of 8 possible tokens
|
= note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
help: if this is a type, 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);
| ++
| ~~~~~~~~~~~~~~~~~~

error: expected one of `:`, `@`, or `|`, found `,`
--> $DIR/anon-params-denied-2018.rs:22:36
Expand Down
7 changes: 5 additions & 2 deletions tests/ui/suggestions/issue-64252-self-type.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
// This test checks that a suggestion to add a `self: ` parameter name is provided
// to functions where this is applicable.

pub fn foo(Box<Self>) { } //~ ERROR expected one of
pub fn foo(Box<Self>) { }
//~^ ERROR expected one of `:`, `@`, or `|`, found `<`

struct Bar;

impl Bar {
fn bar(Box<Self>) { } //~ ERROR expected one of
fn bar(Box<Self>) { }
//~^ ERROR expected one of `:`, `@`, or `|`, found `<`
}

fn main() { }
2 changes: 1 addition & 1 deletion tests/ui/suggestions/issue-64252-self-type.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ LL | pub fn foo(_: Box<Self>) { }
| ++

error: expected one of `:`, `@`, or `|`, found `<`
--> $DIR/issue-64252-self-type.rs:8:15
--> $DIR/issue-64252-self-type.rs:10:15
|
LL | fn bar(Box<Self>) { }
| ^ expected one of `:`, `@`, or `|`
Expand Down

0 comments on commit dce7e87

Please sign in to comment.