about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-08-25 22:50:12 +0000
committerbors <bors@rust-lang.org>2018-08-25 22:50:12 +0000
commitf272688bbb1e007126384e8a0474ec1ea64dc481 (patch)
tree0336c6ffc3684e6ab57ffbe4fae15e57ea382976
parent39e6ba82182b264c94bc62a1284d115b50ff1bd3 (diff)
parentb32b6e803b8e7ad1ee2258ef5784af7e4010be4b (diff)
downloadrust-f272688bbb1e007126384e8a0474ec1ea64dc481.tar.gz
rust-f272688bbb1e007126384e8a0474ec1ea64dc481.zip
Auto merge of #53612 - mark-i-m:anon_param_disallowed_2018, r=petrochenkov
Remove anonymous trait params from 2018 and beyond

cc @Centril @nikomatsakis
cc #41686 rust-lang/rfcs#2522 #53272

This PR removes support for anonymous trait parameters syntactically in rust 2018 and onward.

TODO:
- [x] Add tests
-rw-r--r--src/libsyntax/parse/parser.rs8
-rw-r--r--src/test/ui/anon-params-denied-2018.rs12
-rw-r--r--src/test/ui/anon-params-denied-2018.stderr14
-rw-r--r--src/test/ui/anon-params-deprecated.fixed19
-rw-r--r--src/test/ui/anon-params-deprecated.rs22
-rw-r--r--src/test/ui/anon-params-deprecated.stderr22
-rw-r--r--src/test/ui/lint/lint-anon-param-edition.fixed23
-rw-r--r--src/test/ui/lint/lint-anon-param-edition.rs23
-rw-r--r--src/test/ui/lint/lint-anon-param-edition.stderr10
9 files changed, 70 insertions, 83 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 725360b842d..1695d3a8f96 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1376,7 +1376,13 @@ impl<'a> Parser<'a> {
                 // This is somewhat dubious; We don't want to allow
                 // argument names to be left off if there is a
                 // definition...
-                p.parse_arg_general(false)
+
+                // We don't allow argument names to be left off in edition 2018.
+                if p.span.edition() >= Edition::Edition2018 {
+                    p.parse_arg_general(true)
+                } else {
+                    p.parse_arg_general(false)
+                }
             })?;
             generics.where_clause = self.parse_where_clause()?;
 
diff --git a/src/test/ui/anon-params-denied-2018.rs b/src/test/ui/anon-params-denied-2018.rs
new file mode 100644
index 00000000000..5e77aa8fbb9
--- /dev/null
+++ b/src/test/ui/anon-params-denied-2018.rs
@@ -0,0 +1,12 @@
+// Tests that anonymous parameters are a hard error in edition 2018.
+
+// edition:2018
+
+trait T {
+    fn foo(i32); //~ expected one of `:` or `@`, found `)`
+
+    fn bar_with_default_impl(String, String) {}
+    //~^ ERROR expected one of `:` or `@`, found `,`
+}
+
+fn main() {}
diff --git a/src/test/ui/anon-params-denied-2018.stderr b/src/test/ui/anon-params-denied-2018.stderr
new file mode 100644
index 00000000000..24a1e6ecd93
--- /dev/null
+++ b/src/test/ui/anon-params-denied-2018.stderr
@@ -0,0 +1,14 @@
+error: expected one of `:` or `@`, found `)`
+  --> $DIR/anon-params-denied-2018.rs:6:15
+   |
+LL |     fn foo(i32); //~ expected one of `:` or `@`, found `)`
+   |               ^ expected one of `:` or `@` here
+
+error: expected one of `:` or `@`, found `,`
+  --> $DIR/anon-params-denied-2018.rs:8:36
+   |
+LL |     fn bar_with_default_impl(String, String) {}
+   |                                    ^ expected one of `:` or `@` here
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/anon-params-deprecated.fixed b/src/test/ui/anon-params-deprecated.fixed
new file mode 100644
index 00000000000..7eee47dcb5f
--- /dev/null
+++ b/src/test/ui/anon-params-deprecated.fixed
@@ -0,0 +1,19 @@
+#![warn(anonymous_parameters)]
+// Test for the anonymous_parameters deprecation lint (RFC 1685)
+
+// compile-pass
+// edition:2015
+// run-rustfix
+
+trait T {
+    fn foo(_: i32); //~ WARNING anonymous parameters are deprecated
+                 //~| WARNING hard error
+
+    fn bar_with_default_impl(_: String, _: String) {}
+    //~^ WARNING anonymous parameters are deprecated
+    //~| WARNING hard error
+    //~| WARNING anonymous parameters are deprecated
+    //~| WARNING hard error
+}
+
+fn main() {}
diff --git a/src/test/ui/anon-params-deprecated.rs b/src/test/ui/anon-params-deprecated.rs
index 4d37ba920f3..74de0c0b834 100644
--- a/src/test/ui/anon-params-deprecated.rs
+++ b/src/test/ui/anon-params-deprecated.rs
@@ -1,24 +1,18 @@
-// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-#![forbid(anonymous_parameters)]
+#![warn(anonymous_parameters)]
 // Test for the anonymous_parameters deprecation lint (RFC 1685)
 
+// compile-pass
+// edition:2015
+// run-rustfix
+
 trait T {
-    fn foo(i32); //~ ERROR anonymous parameters are deprecated
+    fn foo(i32); //~ WARNING anonymous parameters are deprecated
                  //~| WARNING hard error
 
     fn bar_with_default_impl(String, String) {}
-    //~^ ERROR anonymous parameters are deprecated
+    //~^ WARNING anonymous parameters are deprecated
     //~| WARNING hard error
-    //~| ERROR anonymous parameters are deprecated
+    //~| WARNING anonymous parameters are deprecated
     //~| WARNING hard error
 }
 
diff --git a/src/test/ui/anon-params-deprecated.stderr b/src/test/ui/anon-params-deprecated.stderr
index fa13b8d97e5..e1c27ceefa9 100644
--- a/src/test/ui/anon-params-deprecated.stderr
+++ b/src/test/ui/anon-params-deprecated.stderr
@@ -1,19 +1,19 @@
-error: anonymous parameters are deprecated and will be removed in the next edition.
-  --> $DIR/anon-params-deprecated.rs:15:12
+warning: anonymous parameters are deprecated and will be removed in the next edition.
+  --> $DIR/anon-params-deprecated.rs:9:12
    |
-LL |     fn foo(i32); //~ ERROR anonymous parameters are deprecated
+LL |     fn foo(i32); //~ WARNING anonymous parameters are deprecated
    |            ^^^ help: Try naming the parameter or explicitly ignoring it: `_: i32`
    |
 note: lint level defined here
-  --> $DIR/anon-params-deprecated.rs:11:11
+  --> $DIR/anon-params-deprecated.rs:1:9
    |
-LL | #![forbid(anonymous_parameters)]
-   |           ^^^^^^^^^^^^^^^^^^^^
+LL | #![warn(anonymous_parameters)]
+   |         ^^^^^^^^^^^^^^^^^^^^
    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
    = note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
 
-error: anonymous parameters are deprecated and will be removed in the next edition.
-  --> $DIR/anon-params-deprecated.rs:18:30
+warning: anonymous parameters are deprecated and will be removed in the next edition.
+  --> $DIR/anon-params-deprecated.rs:12:30
    |
 LL |     fn bar_with_default_impl(String, String) {}
    |                              ^^^^^^ help: Try naming the parameter or explicitly ignoring it: `_: String`
@@ -21,8 +21,8 @@ LL |     fn bar_with_default_impl(String, String) {}
    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
    = note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
 
-error: anonymous parameters are deprecated and will be removed in the next edition.
-  --> $DIR/anon-params-deprecated.rs:18:38
+warning: anonymous parameters are deprecated and will be removed in the next edition.
+  --> $DIR/anon-params-deprecated.rs:12:38
    |
 LL |     fn bar_with_default_impl(String, String) {}
    |                                      ^^^^^^ help: Try naming the parameter or explicitly ignoring it: `_: String`
@@ -30,5 +30,3 @@ LL |     fn bar_with_default_impl(String, String) {}
    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
    = note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
 
-error: aborting due to 3 previous errors
-
diff --git a/src/test/ui/lint/lint-anon-param-edition.fixed b/src/test/ui/lint/lint-anon-param-edition.fixed
deleted file mode 100644
index c4379b496f8..00000000000
--- a/src/test/ui/lint/lint-anon-param-edition.fixed
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// tests that the anonymous_parameters lint is warn-by-default on the 2018 edition
-
-// compile-pass
-// edition:2018
-// run-rustfix
-
-trait Foo {
-    fn foo(_: u8);
-    //^ WARN anonymous parameters are deprecated
-    //| WARN this was previously accepted
-}
-
-fn main() {}
diff --git a/src/test/ui/lint/lint-anon-param-edition.rs b/src/test/ui/lint/lint-anon-param-edition.rs
deleted file mode 100644
index 13eb5dfd816..00000000000
--- a/src/test/ui/lint/lint-anon-param-edition.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-// tests that the anonymous_parameters lint is warn-by-default on the 2018 edition
-
-// compile-pass
-// edition:2018
-// run-rustfix
-
-trait Foo {
-    fn foo(u8);
-    //^ WARN anonymous parameters are deprecated
-    //| WARN this was previously accepted
-}
-
-fn main() {}
diff --git a/src/test/ui/lint/lint-anon-param-edition.stderr b/src/test/ui/lint/lint-anon-param-edition.stderr
deleted file mode 100644
index de347770aec..00000000000
--- a/src/test/ui/lint/lint-anon-param-edition.stderr
+++ /dev/null
@@ -1,10 +0,0 @@
-warning: anonymous parameters are deprecated and will be removed in the next edition.
-  --> $DIR/lint-anon-param-edition.rs:18:12
-   |
-LL |     fn foo(u8);
-   |            ^^ help: Try naming the parameter or explicitly ignoring it: `_: u8`
-   |
-   = note: #[warn(anonymous_parameters)] on by default
-   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
-   = note: for more information, see issue #41686 <https://github.com/rust-lang/rust/issues/41686>
-