Remove spurious complaint about missing expression for bare semicolons

This commit is contained in:
Esteban Küber 2019-02-05 02:25:06 -08:00
parent 99be87aac3
commit 1495d30448
3 changed files with 27 additions and 9 deletions

View file

@ -731,7 +731,7 @@ impl<'a> Parser<'a> {
Applicability::MaybeIncorrect,
);
err.emit();
// self.expected_tokens.clear(); // reduce errors
self.expected_tokens.clear(); // reduce errors
Ok(true)
}
_ => Err(err),
@ -2814,6 +2814,21 @@ impl<'a> Parser<'a> {
hi = pth.span;
ex = ExprKind::Path(None, pth);
} else {
if !self.unclosed_delims.is_empty() && self.check(&token::Semi) {
// Don't complain about bare semicolons after unclosed braces
// recovery in order to keep the error count down. Fixing the
// delimiters will possibly also fix the bare semicolon found in
// expression context. For example, silence the following error:
// ```
// error: expected expression, found `;`
// --> file.rs:2:13
// |
// 2 | foo(bar(;
// | ^ expected expression
// ```
self.bump();
return Ok(self.mk_expr(self.span, ExprKind::Err, ThinVec::new()));
}
match self.parse_literal_maybe_minus() {
Ok(expr) => {
hi = expr.span;

View file

@ -2,6 +2,8 @@
fn main() {
foo(bar(;
//~^ ERROR: expected expression, found `;`
//~^ ERROR cannot find function `bar` in this scope
}
//~^ ERROR: incorrect close delimiter: `}`
fn foo(_: usize) {}

View file

@ -1,9 +1,3 @@
error: expected expression, found `;`
--> $DIR/token-error-correct.rs:4:13
|
LL | foo(bar(;
| ^ expected expression
error: incorrect close delimiter: `}`
--> $DIR/token-error-correct.rs:6:1
|
@ -11,9 +5,16 @@ LL | fn main() {
| - close delimiter possibly meant for this
LL | foo(bar(;
| - un-closed delimiter
LL | //~^ ERROR: expected expression, found `;`
LL | //~^ ERROR cannot find function `bar` in this scope
LL | }
| ^ incorrect close delimiter
error[E0425]: cannot find function `bar` in this scope
--> $DIR/token-error-correct.rs:4:9
|
LL | foo(bar(;
| ^^^ not found in this scope
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0425`.