Skip to content

Commit

Permalink
Auto merge of #53612 - mark-i-m:anon_param_disallowed_2018, r=petroch…
Browse files Browse the repository at this point in the history
…enkov

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
  • Loading branch information
bors committed Aug 25, 2018
2 parents 39e6ba8 + b32b6e8 commit f272688
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 83 deletions.
8 changes: 7 additions & 1 deletion src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()?;

Expand Down
12 changes: 12 additions & 0 deletions src/test/ui/anon-params-denied-2018.rs
Original file line number Diff line number Diff line change
@@ -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() {}
14 changes: 14 additions & 0 deletions src/test/ui/anon-params-denied-2018.stderr
Original file line number Diff line number Diff line change
@@ -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

19 changes: 19 additions & 0 deletions src/test/ui/anon-params-deprecated.fixed
Original file line number Diff line number Diff line change
@@ -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() {}
22 changes: 8 additions & 14 deletions src/test/ui/anon-params-deprecated.rs
Original file line number Diff line number Diff line change
@@ -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
}

Expand Down
22 changes: 10 additions & 12 deletions src/test/ui/anon-params-deprecated.stderr
Original file line number Diff line number Diff line change
@@ -1,34 +1,32 @@
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`
|
= 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`
|
= 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

23 changes: 0 additions & 23 deletions src/test/ui/lint/lint-anon-param-edition.fixed

This file was deleted.

23 changes: 0 additions & 23 deletions src/test/ui/lint/lint-anon-param-edition.rs

This file was deleted.

10 changes: 0 additions & 10 deletions src/test/ui/lint/lint-anon-param-edition.stderr

This file was deleted.

0 comments on commit f272688

Please sign in to comment.