about summary refs log tree commit diff
diff options
context:
space:
mode:
authorr0cky <mu001999@outlook.com>2023-08-03 10:34:57 +0000
committerr0cky <mu001999@outlook.com>2023-08-03 10:34:57 +0000
commitdce7e87b1646fd5f4f7908fcd0aa1060c5189d44 (patch)
treea6e4363e176bb98ab7628c090e3446de18cb5c5a
parent8c8af6cf99d6a54ece11d21c15e909aef2b60552 (diff)
downloadrust-dce7e87b1646fd5f4f7908fcd0aa1060c5189d44.tar.gz
rust-dce7e87b1646fd5f4f7908fcd0aa1060c5189d44.zip
Reduce arbitrary self type suggestions
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs18
-rw-r--r--tests/ui/anon-params/anon-params-denied-2018.stderr20
-rw-r--r--tests/ui/suggestions/issue-64252-self-type.rs7
-rw-r--r--tests/ui/suggestions/issue-64252-self-type.stderr2
4 files changed, 15 insertions, 32 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs
index 5fa4f7902d6..00ffa7de2ff 100644
--- a/compiler/rustc_parse/src/parser/diagnostics.rs
+++ b/compiler/rustc_parse/src/parser/diagnostics.rs
@@ -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,
@@ -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)
@@ -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() {
@@ -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",
diff --git a/tests/ui/anon-params/anon-params-denied-2018.stderr b/tests/ui/anon-params/anon-params-denied-2018.stderr
index ede0e70cd71..bb60c898e81 100644
--- a/tests/ui/anon-params/anon-params-denied-2018.stderr
+++ b/tests/ui/anon-params/anon-params-denied-2018.stderr
@@ -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
@@ -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
@@ -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
diff --git a/tests/ui/suggestions/issue-64252-self-type.rs b/tests/ui/suggestions/issue-64252-self-type.rs
index ea76dc8742b..128d5e85c22 100644
--- a/tests/ui/suggestions/issue-64252-self-type.rs
+++ b/tests/ui/suggestions/issue-64252-self-type.rs
@@ -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() { }
diff --git a/tests/ui/suggestions/issue-64252-self-type.stderr b/tests/ui/suggestions/issue-64252-self-type.stderr
index dbef39faead..c3418dab0e8 100644
--- a/tests/ui/suggestions/issue-64252-self-type.stderr
+++ b/tests/ui/suggestions/issue-64252-self-type.stderr
@@ -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 `|`