parent
6ddab3e078
commit
f5db411410
|
@ -1777,7 +1777,26 @@ impl<'a> Parser<'a> {
|
||||||
require_name);
|
require_name);
|
||||||
let pat = self.parse_pat()?;
|
let pat = self.parse_pat()?;
|
||||||
|
|
||||||
self.expect(&token::Colon)?;
|
if let Err(mut err) = self.expect(&token::Colon) {
|
||||||
|
// If we find a pattern followed by an identifier, it could be an (incorrect)
|
||||||
|
// C-style parameter declaration.
|
||||||
|
if self.check_ident() && self.look_ahead(1, |t| {
|
||||||
|
*t == token::Comma || *t == token::CloseDelim(token::Paren)
|
||||||
|
}) {
|
||||||
|
let ident = self.parse_ident().unwrap();
|
||||||
|
let span = pat.span.with_hi(ident.span.hi());
|
||||||
|
|
||||||
|
err.span_suggestion_with_applicability(
|
||||||
|
span,
|
||||||
|
"declare the type after the parameter binding",
|
||||||
|
String::from("<identifier>: <type>"),
|
||||||
|
Applicability::HasPlaceholders,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
|
||||||
(pat, self.parse_ty()?)
|
(pat, self.parse_ty()?)
|
||||||
} else {
|
} else {
|
||||||
debug!("parse_arg_general ident_to_pat");
|
debug!("parse_arg_general ident_to_pat");
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
// Copyright 2018 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.
|
||||||
|
|
||||||
|
struct S;
|
||||||
|
|
||||||
|
impl S {
|
||||||
|
fn foo(&self, &str bar) {}
|
||||||
|
//~^ ERROR expected one of `:` or `@`
|
||||||
|
//~| HELP declare the type after the parameter binding
|
||||||
|
//~| SUGGESTION <identifier>: <type>
|
||||||
|
}
|
||||||
|
|
||||||
|
fn baz(S quux, xyzzy: i32) {}
|
||||||
|
//~^ ERROR expected one of `:` or `@`
|
||||||
|
//~| HELP declare the type after the parameter binding
|
||||||
|
//~| SUGGESTION <identifier>: <type>
|
||||||
|
|
||||||
|
fn one(i32 a b) {}
|
||||||
|
//~^ ERROR expected one of `:` or `@`
|
||||||
|
|
||||||
|
fn pattern((i32, i32) (a, b)) {}
|
||||||
|
//~^ ERROR expected `:`
|
||||||
|
|
||||||
|
fn fizz(i32) {}
|
||||||
|
//~^ ERROR expected one of `:` or `@`
|
||||||
|
|
||||||
|
fn missing_colon(quux S) {}
|
||||||
|
//~^ ERROR expected one of `:` or `@`
|
||||||
|
//~| HELP declare the type after the parameter binding
|
||||||
|
//~| SUGGESTION <identifier>: <type>
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,47 @@
|
||||||
|
error: expected one of `:` or `@`, found `bar`
|
||||||
|
--> $DIR/inverted-parameters.rs:14:24
|
||||||
|
|
|
||||||
|
LL | fn foo(&self, &str bar) {}
|
||||||
|
| -----^^^
|
||||||
|
| | |
|
||||||
|
| | expected one of `:` or `@` here
|
||||||
|
| help: declare the type after the parameter binding: `<identifier>: <type>`
|
||||||
|
|
||||||
|
error: expected one of `:` or `@`, found `quux`
|
||||||
|
--> $DIR/inverted-parameters.rs:20:10
|
||||||
|
|
|
||||||
|
LL | fn baz(S quux, xyzzy: i32) {}
|
||||||
|
| --^^^^
|
||||||
|
| | |
|
||||||
|
| | expected one of `:` or `@` here
|
||||||
|
| help: declare the type after the parameter binding: `<identifier>: <type>`
|
||||||
|
|
||||||
|
error: expected one of `:` or `@`, found `a`
|
||||||
|
--> $DIR/inverted-parameters.rs:25:12
|
||||||
|
|
|
||||||
|
LL | fn one(i32 a b) {}
|
||||||
|
| ^ expected one of `:` or `@` here
|
||||||
|
|
||||||
|
error: expected `:`, found `(`
|
||||||
|
--> $DIR/inverted-parameters.rs:28:23
|
||||||
|
|
|
||||||
|
LL | fn pattern((i32, i32) (a, b)) {}
|
||||||
|
| ^ expected `:`
|
||||||
|
|
||||||
|
error: expected one of `:` or `@`, found `)`
|
||||||
|
--> $DIR/inverted-parameters.rs:31:12
|
||||||
|
|
|
||||||
|
LL | fn fizz(i32) {}
|
||||||
|
| ^ expected one of `:` or `@` here
|
||||||
|
|
||||||
|
error: expected one of `:` or `@`, found `S`
|
||||||
|
--> $DIR/inverted-parameters.rs:34:23
|
||||||
|
|
|
||||||
|
LL | fn missing_colon(quux S) {}
|
||||||
|
| -----^
|
||||||
|
| | |
|
||||||
|
| | expected one of `:` or `@` here
|
||||||
|
| help: declare the type after the parameter binding: `<identifier>: <type>`
|
||||||
|
|
||||||
|
error: aborting due to 6 previous errors
|
||||||
|
|
Loading…
Reference in New Issue