From 040f56881500279889fd847b767f5fde14b21028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sun, 25 Oct 2020 12:13:27 -0700 Subject: [PATCH] Rely on regular "expected"/"found" parser error for `fn` --- compiler/rustc_parse/src/parser/diagnostics.rs | 8 -------- compiler/rustc_parse/src/parser/item.rs | 9 +++++---- src/test/ui/issues/issue-39616.rs | 2 +- src/test/ui/issues/issue-39616.stderr | 4 ++-- src/test/ui/issues/issue-58856-1.rs | 2 +- src/test/ui/issues/issue-58856-1.stderr | 4 ++-- src/test/ui/parser/fn-colon-return-type.rs | 5 +++++ src/test/ui/parser/fn-colon-return-type.stderr | 8 ++++++++ src/test/ui/parser/issue-24780.rs | 2 +- src/test/ui/parser/issue-24780.stderr | 4 ++-- src/test/ui/parser/issue-6610.rs | 2 +- src/test/ui/parser/issue-6610.stderr | 4 ++-- src/test/ui/parser/missing_right_paren.stderr | 4 ++-- src/test/ui/parser/not-a-pred.rs | 3 +-- src/test/ui/parser/not-a-pred.stderr | 6 +++--- 15 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 src/test/ui/parser/fn-colon-return-type.rs create mode 100644 src/test/ui/parser/fn-colon-return-type.stderr diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 1ea01d95a134e..6e4ae960b64ac 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -1550,14 +1550,6 @@ impl<'a> Parser<'a> { } } - pub(super) fn expected_semi_or_open_brace(&mut self) -> PResult<'a, T> { - let token_str = super::token_descr(&self.token); - let msg = &format!("expected `;` or `{{`, found {}", token_str); - let mut err = self.struct_span_err(self.token.span, msg); - err.span_label(self.token.span, "expected `;` or `{`"); - Err(err) - } - pub(super) fn eat_incorrect_doc_comment_for_param_type(&mut self) { if let token::DocComment(..) = self.token.kind { self.struct_span_err( diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index 4ad259715bd98..2b143cd7696ca 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -1551,10 +1551,9 @@ impl<'a> Parser<'a> { attrs: &mut Vec, sig_hi: &mut Span, ) -> PResult<'a, Option>> { - let (inner_attrs, body) = if self.check(&token::Semi) { + let (inner_attrs, body) = if self.eat(&token::Semi) { // Include the trailing semicolon in the span of the signature - *sig_hi = self.token.span; - self.bump(); // `;` + *sig_hi = self.prev_token.span; (Vec::new(), None) } else if self.check(&token::OpenDelim(token::Brace)) || self.token.is_whole_block() { self.parse_inner_attrs_and_block().map(|(attrs, body)| (attrs, Some(body)))? @@ -1574,7 +1573,9 @@ impl<'a> Parser<'a> { .emit(); (Vec::new(), Some(self.mk_block_err(span))) } else { - return self.expected_semi_or_open_brace(); + return self + .expected_one_of_not_found(&[], &[token::Semi, token::OpenDelim(token::Brace)]) + .map(|_| None); }; attrs.extend(inner_attrs); Ok(body) diff --git a/src/test/ui/issues/issue-39616.rs b/src/test/ui/issues/issue-39616.rs index 428856a36b425..9aebb4e2f4854 100644 --- a/src/test/ui/issues/issue-39616.rs +++ b/src/test/ui/issues/issue-39616.rs @@ -1,4 +1,4 @@ fn foo(a: [0; 1]) {} //~ ERROR expected type, found `0` -//~| ERROR expected `;` or `{`, found `]` +//~| ERROR expected one of `)`, `,`, `->`, `;`, `where`, or `{`, found `]` fn main() {} diff --git a/src/test/ui/issues/issue-39616.stderr b/src/test/ui/issues/issue-39616.stderr index ced582746617b..fa8ef50a073f2 100644 --- a/src/test/ui/issues/issue-39616.stderr +++ b/src/test/ui/issues/issue-39616.stderr @@ -4,11 +4,11 @@ error: expected type, found `0` LL | fn foo(a: [0; 1]) {} | ^ expected type -error: expected `;` or `{`, found `]` +error: expected one of `)`, `,`, `->`, `;`, `where`, or `{`, found `]` --> $DIR/issue-39616.rs:1:16 | LL | fn foo(a: [0; 1]) {} - | ^ expected `;` or `{` + | ^ expected one of `)`, `,`, `->`, `;`, `where`, or `{` error: aborting due to 2 previous errors diff --git a/src/test/ui/issues/issue-58856-1.rs b/src/test/ui/issues/issue-58856-1.rs index 8b1a39a94e67a..332a3014416b5 100644 --- a/src/test/ui/issues/issue-58856-1.rs +++ b/src/test/ui/issues/issue-58856-1.rs @@ -2,7 +2,7 @@ impl A { //~^ ERROR cannot find type `A` in this scope fn b(self> //~^ ERROR expected one of `)`, `,`, or `:`, found `>` - //~| ERROR expected `;` or `{`, found `>` + //~| ERROR expected one of `->`, `;`, `where`, or `{`, found `>` } fn main() {} diff --git a/src/test/ui/issues/issue-58856-1.stderr b/src/test/ui/issues/issue-58856-1.stderr index a8db8e8b41ad2..f1abb40ed7a73 100644 --- a/src/test/ui/issues/issue-58856-1.stderr +++ b/src/test/ui/issues/issue-58856-1.stderr @@ -6,14 +6,14 @@ LL | fn b(self> | | | unclosed delimiter -error: expected `;` or `{`, found `>` +error: expected one of `->`, `;`, `where`, or `{`, found `>` --> $DIR/issue-58856-1.rs:3:14 | LL | impl A { | - while parsing this item list starting here LL | LL | fn b(self> - | ^ expected `;` or `{` + | ^ expected one of `->`, `;`, `where`, or `{` ... LL | } | - the item list ends here diff --git a/src/test/ui/parser/fn-colon-return-type.rs b/src/test/ui/parser/fn-colon-return-type.rs new file mode 100644 index 0000000000000..c791fb3ae6749 --- /dev/null +++ b/src/test/ui/parser/fn-colon-return-type.rs @@ -0,0 +1,5 @@ +fn foo(x: i32): i32 { //~ ERROR expected one of `->`, `;`, `where`, or `{`, found `:` + x +} + +fn main() {} diff --git a/src/test/ui/parser/fn-colon-return-type.stderr b/src/test/ui/parser/fn-colon-return-type.stderr new file mode 100644 index 0000000000000..92df9bc60bd3c --- /dev/null +++ b/src/test/ui/parser/fn-colon-return-type.stderr @@ -0,0 +1,8 @@ +error: expected one of `->`, `;`, `where`, or `{`, found `:` + --> $DIR/fn-colon-return-type.rs:1:15 + | +LL | fn foo(x: i32): i32 { + | ^ expected one of `->`, `;`, `where`, or `{` + +error: aborting due to previous error + diff --git a/src/test/ui/parser/issue-24780.rs b/src/test/ui/parser/issue-24780.rs index 8b46aa2bf22a1..568a6c5f05c85 100644 --- a/src/test/ui/parser/issue-24780.rs +++ b/src/test/ui/parser/issue-24780.rs @@ -3,6 +3,6 @@ // expected one of ..., `>`, ... found `>` fn foo() -> Vec> { - //~^ ERROR expected `;` or `{`, found `>` + //~^ ERROR expected one of `!`, `+`, `::`, `;`, `where`, or `{`, found `>` Vec::new() } diff --git a/src/test/ui/parser/issue-24780.stderr b/src/test/ui/parser/issue-24780.stderr index d65a5f448739a..bdd089bb7a139 100644 --- a/src/test/ui/parser/issue-24780.stderr +++ b/src/test/ui/parser/issue-24780.stderr @@ -1,8 +1,8 @@ -error: expected `;` or `{`, found `>` +error: expected one of `!`, `+`, `::`, `;`, `where`, or `{`, found `>` --> $DIR/issue-24780.rs:5:23 | LL | fn foo() -> Vec> { - | ^ expected `;` or `{` + | ^ expected one of `!`, `+`, `::`, `;`, `where`, or `{` error: aborting due to previous error diff --git a/src/test/ui/parser/issue-6610.rs b/src/test/ui/parser/issue-6610.rs index 2dfa08fe82d62..9ed5a61220bde 100644 --- a/src/test/ui/parser/issue-6610.rs +++ b/src/test/ui/parser/issue-6610.rs @@ -1,3 +1,3 @@ -trait Foo { fn a() } //~ ERROR expected `;` or `{`, found `}` +trait Foo { fn a() } //~ ERROR expected one of `->`, `;`, `where`, or `{`, found `}` fn main() {} diff --git a/src/test/ui/parser/issue-6610.stderr b/src/test/ui/parser/issue-6610.stderr index a980420894664..acbecfded4ba5 100644 --- a/src/test/ui/parser/issue-6610.stderr +++ b/src/test/ui/parser/issue-6610.stderr @@ -1,10 +1,10 @@ -error: expected `;` or `{`, found `}` +error: expected one of `->`, `;`, `where`, or `{`, found `}` --> $DIR/issue-6610.rs:1:20 | LL | trait Foo { fn a() } | - ^ | | | - | | expected `;` or `{` + | | expected one of `->`, `;`, `where`, or `{` | | the item list ends here | while parsing this item list starting here diff --git a/src/test/ui/parser/missing_right_paren.stderr b/src/test/ui/parser/missing_right_paren.stderr index c1ceb81a07c47..22e1c2f97e769 100644 --- a/src/test/ui/parser/missing_right_paren.stderr +++ b/src/test/ui/parser/missing_right_paren.stderr @@ -22,11 +22,11 @@ error: expected one of `:` or `|`, found `)` LL | fn main((ؼ | ^ expected one of `:` or `|` -error: expected `;` or `{`, found `` +error: expected one of `->`, `;`, `where`, or `{`, found `` --> $DIR/missing_right_paren.rs:3:11 | LL | fn main((ؼ - | ^ expected `;` or `{` + | ^ expected one of `->`, `;`, `where`, or `{` error: aborting due to 4 previous errors diff --git a/src/test/ui/parser/not-a-pred.rs b/src/test/ui/parser/not-a-pred.rs index e6a02d5fc5642..1b3d9bf66bb60 100644 --- a/src/test/ui/parser/not-a-pred.rs +++ b/src/test/ui/parser/not-a-pred.rs @@ -1,6 +1,5 @@ -// error-pattern: lt - fn f(a: isize, b: isize) : lt(a, b) { } +//~^ ERROR expected one of `->`, `;`, `where`, or `{`, found `:` fn lt(a: isize, b: isize) { } diff --git a/src/test/ui/parser/not-a-pred.stderr b/src/test/ui/parser/not-a-pred.stderr index dce54655fa027..ec413c5594c44 100644 --- a/src/test/ui/parser/not-a-pred.stderr +++ b/src/test/ui/parser/not-a-pred.stderr @@ -1,8 +1,8 @@ -error: expected `;` or `{`, found `:` - --> $DIR/not-a-pred.rs:3:26 +error: expected one of `->`, `;`, `where`, or `{`, found `:` + --> $DIR/not-a-pred.rs:1:26 | LL | fn f(a: isize, b: isize) : lt(a, b) { } - | ^ expected `;` or `{` + | ^ expected one of `->`, `;`, `where`, or `{` error: aborting due to previous error