parse_labeled_expr: add a suggestion on missing colon.

This commit is contained in:
Mazdak Farrokhzad 2020-03-06 03:43:59 +01:00
parent fe848b44fe
commit e72df7edad
2 changed files with 31 additions and 14 deletions

View File

@ -1106,14 +1106,24 @@ impl<'a> Parser<'a> {
}?;
if !ate_colon {
self.struct_span_err(expr.span, "labeled expression must be followed by `:`")
.span_label(lo, "the label")
.emit();
self.error_labeled_expr_must_be_followed_by_colon(lo, expr.span);
}
Ok(expr)
}
fn error_labeled_expr_must_be_followed_by_colon(&self, lo: Span, span: Span) {
self.struct_span_err(span, "labeled expression must be followed by `:`")
.span_label(lo, "the label")
.span_suggestion_short(
lo.shrink_to_hi(),
"add `:` after the label",
": ".to_string(),
Applicability::MachineApplicable,
)
.emit();
}
/// Recover on the syntax `do catch { ... }` suggesting `try { ... }` instead.
fn recover_do_catch(&mut self, attrs: AttrVec) -> PResult<'a, P<Expr>> {
let lo = self.token.span;

View File

@ -2,32 +2,36 @@ error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:4:5
|
LL | 'l0 while false {}
| ---^^^^^^^^^^^^^^^
| |
| ----^^^^^^^^^^^^^^
| | |
| | help: add `:` after the label
| the label
error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:5:5
|
LL | 'l1 for _ in 0..1 {}
| ---^^^^^^^^^^^^^^^^^
| |
| ----^^^^^^^^^^^^^^^^
| | |
| | help: add `:` after the label
| the label
error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:6:5
|
LL | 'l2 loop {}
| ---^^^^^^^^
| |
| ----^^^^^^^
| | |
| | help: add `:` after the label
| the label
error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:7:5
|
LL | 'l3 {}
| ---^^^
| |
| ----^^
| | |
| | help: add `:` after the label
| the label
error: expected `while`, `for`, `loop` or `{` after a label
@ -40,8 +44,9 @@ error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:8:9
|
LL | 'l4 0;
| --- ^
| |
| ----^
| | |
| | help: add `:` after the label
| the label
error: cannot use a `block` macro fragment here
@ -61,7 +66,9 @@ error: labeled expression must be followed by `:`
--> $DIR/labeled-no-colon-expr.rs:16:8
|
LL | 'l5 $b;
| --- the label
| ---- help: add `:` after the label
| |
| the label
...
LL | m!({});
| ^^