diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 725360b842d43..1695d3a8f96b0 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 0000000000000..5e77aa8fbb923 --- /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 0000000000000..24a1e6ecd932c --- /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 0000000000000..7eee47dcb5fc7 --- /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 4d37ba920f3d6..74de0c0b83407 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 or the MIT license -// , 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 fa13b8d97e5d9..e1c27ceefa9e0 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 -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 -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 -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 c4379b496f8d4..0000000000000 --- 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 or the MIT license -// , 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 13eb5dfd816ab..0000000000000 --- 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 or the MIT license -// , 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 de347770aec77..0000000000000 --- 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 -