// definition...
// We don't allow argument names to be left off in edition 2018.
- p.parse_arg_general(p.span.rust_2018())
+ p.parse_arg_general(p.span.rust_2018(), true)
})?;
generics.where_clause = self.parse_where_clause()?;
/// This version of parse arg doesn't necessarily require
/// identifier names.
- fn parse_arg_general(&mut self, require_name: bool) -> PResult<'a, Arg> {
+ fn parse_arg_general(&mut self, require_name: bool, is_trait_item: bool) -> PResult<'a, Arg> {
maybe_whole!(self, NtArg, |x| x);
if let Ok(Some(_)) = self.parse_self_arg() {
String::from("<identifier>: <type>"),
Applicability::HasPlaceholders,
);
+ } else if require_name && is_trait_item {
+ err.note("anonymous parameters are removed in the 2018 edition (see RFC 1685)");
}
return Err(err);
/// Parse a single function argument
crate fn parse_arg(&mut self) -> PResult<'a, Arg> {
- self.parse_arg_general(true)
+ self.parse_arg_general(true, false)
}
/// Parse an argument in a lambda header e.g. |arg, arg|
}
}
} else {
- match p.parse_arg_general(named_args) {
+ match p.parse_arg_general(named_args, false) {
Ok(arg) => Ok(Some(arg)),
Err(mut e) => {
e.emit();
|
LL | fn foo(i32); //~ expected one of `:` or `@`, found `)`
| ^ expected one of `:` or `@` here
+ |
+ = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
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
+ |
+ = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)
error: aborting due to 2 previous errors