about summary refs log tree commit diff
path: root/tests/ui
diff options
context:
space:
mode:
authorStuart Cook <Zalathar@users.noreply.github.com>2025-08-15 16:16:41 +1000
committerGitHub <noreply@github.com>2025-08-15 16:16:41 +1000
commitdc047f1385f03c12dcdcd24d76351fc55ab83592 (patch)
treeacbf824bcda0fd11890c487e370f155149201cbc /tests/ui
parent36515e780a22441f67c77ffecc3d3c64e2d50610 (diff)
parent3ce555f6313e78d3eed80fd22e22ef49f5bd3611 (diff)
downloadrust-dc047f1385f03c12dcdcd24d76351fc55ab83592.tar.gz
rust-dc047f1385f03c12dcdcd24d76351fc55ab83592.zip
Rollup merge of #145378 - xizheyin:144968, r=davidtwco
Add `FnContext` in parser for diagnostic

Fixes rust-lang/rust#144968

Inspired by https://github.com/rust-lang/rust/issues/144968#issuecomment-3156094581, I implemented `FnContext` to indicate whether a function should have a self parameter, for example, whether the function is a trait method, whether it is in an impl block. And I removed the outdated note.

I made two commits to show the difference.

cc ``@estebank`` ``@djc``

r? compiler
Diffstat (limited to 'tests/ui')
-rw-r--r--tests/ui/parser/inverted-parameters.rs1
-rw-r--r--tests/ui/parser/inverted-parameters.stderr7
-rw-r--r--tests/ui/parser/lifetime-in-pattern.stderr5
-rw-r--r--tests/ui/parser/omitted-arg-in-item-fn.stderr5
-rw-r--r--tests/ui/parser/pat-lt-bracket-2.stderr5
-rw-r--r--tests/ui/parser/suggest-self-in-bare-function.rs25
-rw-r--r--tests/ui/parser/suggest-self-in-bare-function.stderr56
-rw-r--r--tests/ui/span/issue-34264.stderr11
-rw-r--r--tests/ui/suggestions/issue-64252-self-type.stderr6
-rw-r--r--tests/ui/type/issue-102598.stderr1
10 files changed, 82 insertions, 40 deletions
diff --git a/tests/ui/parser/inverted-parameters.rs b/tests/ui/parser/inverted-parameters.rs
index bc2f53f0be1..5b2827b6fee 100644
--- a/tests/ui/parser/inverted-parameters.rs
+++ b/tests/ui/parser/inverted-parameters.rs
@@ -23,7 +23,6 @@ fn pattern((i32, i32) (a, b)) {}
 fn fizz(i32) {}
 //~^ ERROR expected one of `:`, `@`
 //~| HELP if this is a parameter name, give it a type
-//~| HELP if this is a `self` type, give it a parameter name
 //~| HELP if this is a type, explicitly ignore the parameter name
 
 fn missing_colon(quux S) {}
diff --git a/tests/ui/parser/inverted-parameters.stderr b/tests/ui/parser/inverted-parameters.stderr
index 7b969032d0f..93b95a75608 100644
--- a/tests/ui/parser/inverted-parameters.stderr
+++ b/tests/ui/parser/inverted-parameters.stderr
@@ -34,11 +34,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn fizz(i32) {}
    |            ^ expected one of `:`, `@`, or `|`
    |
-   = 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 fizz(self: i32) {}
-   |         +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn fizz(i32: TypeName) {}
@@ -49,7 +44,7 @@ LL | fn fizz(_: i32) {}
    |         ++
 
 error: expected one of `:`, `@`, or `|`, found `S`
-  --> $DIR/inverted-parameters.rs:29:23
+  --> $DIR/inverted-parameters.rs:28:23
    |
 LL | fn missing_colon(quux S) {}
    |                  -----^
diff --git a/tests/ui/parser/lifetime-in-pattern.stderr b/tests/ui/parser/lifetime-in-pattern.stderr
index ffda28b202b..0d01120a057 100644
--- a/tests/ui/parser/lifetime-in-pattern.stderr
+++ b/tests/ui/parser/lifetime-in-pattern.stderr
@@ -16,11 +16,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn test(&'a str) {
    |                ^ expected one of `:`, `@`, or `|`
    |
-   = 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 test(self: &'a str) {
-   |         +++++
 help: if this is a parameter name, give it a type
    |
 LL - fn test(&'a str) {
diff --git a/tests/ui/parser/omitted-arg-in-item-fn.stderr b/tests/ui/parser/omitted-arg-in-item-fn.stderr
index 6f2a9f64c94..d6bc5d9c68f 100644
--- a/tests/ui/parser/omitted-arg-in-item-fn.stderr
+++ b/tests/ui/parser/omitted-arg-in-item-fn.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo(x) {
    |         ^ expected one of `:`, `@`, or `|`
    |
-   = 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(self: x) {
-   |        +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn foo(x: TypeName) {
diff --git a/tests/ui/parser/pat-lt-bracket-2.stderr b/tests/ui/parser/pat-lt-bracket-2.stderr
index 5fe97b2ef4c..9e056bd63ec 100644
--- a/tests/ui/parser/pat-lt-bracket-2.stderr
+++ b/tests/ui/parser/pat-lt-bracket-2.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | fn a(B<) {}
    |       ^ expected one of `:`, `@`, or `|`
    |
-   = 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 a(self: B<) {}
-   |      +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | fn a(_: B<) {}
diff --git a/tests/ui/parser/suggest-self-in-bare-function.rs b/tests/ui/parser/suggest-self-in-bare-function.rs
new file mode 100644
index 00000000000..e7f2a12bcd0
--- /dev/null
+++ b/tests/ui/parser/suggest-self-in-bare-function.rs
@@ -0,0 +1,25 @@
+// We should not suggest `self` in bare functions.
+// And a note for RFC 1685 should not be shown.
+// See #144968
+
+//@ edition:2018
+
+fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+    value % 2 == 0
+}
+
+struct S;
+
+impl S {
+    fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+        value % 2 == 0
+    }
+}
+
+trait T {
+    fn is_even(value) -> bool { //~ ERROR expected one of `:`, `@`, or `|`, found `)`
+        value % 2 == 0
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/parser/suggest-self-in-bare-function.stderr b/tests/ui/parser/suggest-self-in-bare-function.stderr
new file mode 100644
index 00000000000..40cbe5575fd
--- /dev/null
+++ b/tests/ui/parser/suggest-self-in-bare-function.stderr
@@ -0,0 +1,56 @@
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:7:17
+   |
+LL | fn is_even(value) -> bool {
+   |                 ^ expected one of `:`, `@`, or `|`
+   |
+help: if this is a parameter name, give it a type
+   |
+LL | fn is_even(value: TypeName) -> bool {
+   |                 ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL | fn is_even(_: value) -> bool {
+   |            ++
+
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:14:21
+   |
+LL |     fn is_even(value) -> bool {
+   |                     ^ expected one of `:`, `@`, or `|`
+   |
+help: if this is a `self` type, give it a parameter name
+   |
+LL |     fn is_even(self: value) -> bool {
+   |                +++++
+help: if this is a parameter name, give it a type
+   |
+LL |     fn is_even(value: TypeName) -> bool {
+   |                     ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL |     fn is_even(_: value) -> bool {
+   |                ++
+
+error: expected one of `:`, `@`, or `|`, found `)`
+  --> $DIR/suggest-self-in-bare-function.rs:20:21
+   |
+LL |     fn is_even(value) -> bool {
+   |                     ^ expected one of `:`, `@`, or `|`
+   |
+   = 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 is_even(self: value) -> bool {
+   |                +++++
+help: if this is a parameter name, give it a type
+   |
+LL |     fn is_even(value: TypeName) -> bool {
+   |                     ++++++++++
+help: if this is a type, explicitly ignore the parameter name
+   |
+LL |     fn is_even(_: value) -> bool {
+   |                ++
+
+error: aborting due to 3 previous errors
+
diff --git a/tests/ui/span/issue-34264.stderr b/tests/ui/span/issue-34264.stderr
index c8046a1bddf..cc41d3048df 100644
--- a/tests/ui/span/issue-34264.stderr
+++ b/tests/ui/span/issue-34264.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | fn foo(Option<i32>, String) {}
    |              ^ expected one of `:`, `@`, or `|`
    |
-   = 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(self: Option<i32>, String) {}
-   |        +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | fn foo(_: Option<i32>, String) {}
@@ -20,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo(Option<i32>, String) {}
    |                           ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
 help: if this is a parameter name, give it a type
    |
 LL | fn foo(Option<i32>, String: TypeName) {}
@@ -36,11 +30,6 @@ error: expected one of `:`, `@`, or `|`, found `,`
 LL | fn bar(x, y: usize) {}
    |         ^ expected one of `:`, `@`, or `|`
    |
-   = 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 bar(self: x, y: usize) {}
-   |        +++++
 help: if this is a parameter name, give it a type
    |
 LL | fn bar(x: TypeName, y: usize) {}
diff --git a/tests/ui/suggestions/issue-64252-self-type.stderr b/tests/ui/suggestions/issue-64252-self-type.stderr
index c3418dab0e8..320d09b589b 100644
--- a/tests/ui/suggestions/issue-64252-self-type.stderr
+++ b/tests/ui/suggestions/issue-64252-self-type.stderr
@@ -4,11 +4,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL | pub fn foo(Box<Self>) { }
    |               ^ expected one of `:`, `@`, or `|`
    |
-   = 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 | pub fn foo(self: Box<Self>) { }
-   |            +++++
 help: if this is a type, explicitly ignore the parameter name
    |
 LL | pub fn foo(_: Box<Self>) { }
@@ -20,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `<`
 LL |     fn bar(Box<Self>) { }
    |               ^ expected one of `:`, `@`, or `|`
    |
-   = 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 bar(self: Box<Self>) { }
diff --git a/tests/ui/type/issue-102598.stderr b/tests/ui/type/issue-102598.stderr
index a232395cedb..5623a7aa80d 100644
--- a/tests/ui/type/issue-102598.stderr
+++ b/tests/ui/type/issue-102598.stderr
@@ -15,7 +15,6 @@ error: expected one of `:`, `@`, or `|`, found `)`
 LL | fn foo<'a>(_: impl 'a Sized) {}
    |                            ^ expected one of `:`, `@`, or `|`
    |
-   = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
 help: if this is a parameter name, give it a type
    |
 LL | fn foo<'a>(_: impl 'a Sized: TypeName) {}