diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2018-10-28 11:41:23 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2018-10-28 11:41:23 -0700 |
| commit | d491734b15692038b963fd1bfeaaf39be393b638 (patch) | |
| tree | 8e1ce9b79907491d51fa62659c68949d2d06c351 | |
| parent | ea57134607b31733d507bc9289033064fa8b6cb5 (diff) | |
| download | rust-d491734b15692038b963fd1bfeaaf39be393b638.tar.gz rust-d491734b15692038b963fd1bfeaaf39be393b638.zip | |
Point at `match` when a parse failure ocurrs inside of it
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/label/label_break_value_illegal_uses.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/parser/match-refactor-to-expr.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/parser/match-refactor-to-expr.stderr | 7 | ||||
| -rw-r--r-- | src/test/ui/try-block/try-block-in-match.stderr | 4 |
5 files changed, 17 insertions, 6 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3056d1c545c..5ab0d8166b0 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2474,7 +2474,11 @@ impl<'a> Parser<'a> { return Ok(self.mk_expr(lo.to(hi), ex, attrs)); } if self.eat_keyword(keywords::Match) { - return self.parse_match_expr(attrs); + let match_sp = self.prev_span; + return self.parse_match_expr(attrs).map_err(|mut err| { + err.span_label(match_sp, "while parsing this match expression"); + err + }); } if self.eat_keyword(keywords::Unsafe) { return self.parse_block_expr( diff --git a/src/test/ui/label/label_break_value_illegal_uses.stderr b/src/test/ui/label/label_break_value_illegal_uses.stderr index 0ab1ad2c242..7711b51a5c9 100644 --- a/src/test/ui/label/label_break_value_illegal_uses.stderr +++ b/src/test/ui/label/label_break_value_illegal_uses.stderr @@ -25,7 +25,9 @@ error: expected one of `.`, `?`, `{`, or an operator, found `'b` --> $DIR/label_break_value_illegal_uses.rs:28:17 | LL | match false 'b: {} //~ ERROR expected one of `.`, `?`, `{`, or an operator - | ^^ expected one of `.`, `?`, `{`, or an operator here + | ----- ^^ expected one of `.`, `?`, `{`, or an operator here + | | + | while parsing this match expression error: aborting due to 4 previous errors diff --git a/src/test/ui/parser/match-refactor-to-expr.rs b/src/test/ui/parser/match-refactor-to-expr.rs index 3c88608697a..014dba3d4d0 100644 --- a/src/test/ui/parser/match-refactor-to-expr.rs +++ b/src/test/ui/parser/match-refactor-to-expr.rs @@ -12,7 +12,7 @@ fn main() { let foo = - match + match //~ NOTE while parsing this match expression Some(4).unwrap_or_else(5) //~^ NOTE expected one of `.`, `?`, `{`, or an operator here ; //~ NOTE unexpected token diff --git a/src/test/ui/parser/match-refactor-to-expr.stderr b/src/test/ui/parser/match-refactor-to-expr.stderr index ecca781684c..2ffbddd570f 100644 --- a/src/test/ui/parser/match-refactor-to-expr.stderr +++ b/src/test/ui/parser/match-refactor-to-expr.stderr @@ -1,8 +1,11 @@ error: expected one of `.`, `?`, `{`, or an operator, found `;` --> $DIR/match-refactor-to-expr.rs:18:9 | -LL | match - | ----- help: try removing this `match` +LL | match //~ NOTE while parsing this match expression + | ----- + | | + | while parsing this match expression + | help: try removing this `match` LL | Some(4).unwrap_or_else(5) | - expected one of `.`, `?`, `{`, or an operator here LL | //~^ NOTE expected one of `.`, `?`, `{`, or an operator here diff --git a/src/test/ui/try-block/try-block-in-match.stderr b/src/test/ui/try-block/try-block-in-match.stderr index f07d23885ac..c9b43000877 100644 --- a/src/test/ui/try-block/try-block-in-match.stderr +++ b/src/test/ui/try-block/try-block-in-match.stderr @@ -2,7 +2,9 @@ error: expected expression, found reserved keyword `try` --> $DIR/try-block-in-match.rs:16:11 | LL | match try { false } { _ => {} } //~ ERROR expected expression, found reserved keyword `try` - | ^^^ expected expression + | ----- ^^^ expected expression + | | + | while parsing this match expression error: aborting due to previous error |
