about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/librustc_parse/parser/expr.rs16
-rw-r--r--src/test/ui/parser/labeled-no-colon-expr.stderr29
2 files changed, 31 insertions, 14 deletions
diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs
index 5b39701001f..bab6a58296d 100644
--- a/src/librustc_parse/parser/expr.rs
+++ b/src/librustc_parse/parser/expr.rs
@@ -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;
diff --git a/src/test/ui/parser/labeled-no-colon-expr.stderr b/src/test/ui/parser/labeled-no-colon-expr.stderr
index 8a9e2b32400..a69532555d4 100644
--- a/src/test/ui/parser/labeled-no-colon-expr.stderr
+++ b/src/test/ui/parser/labeled-no-colon-expr.stderr
@@ -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!({});
    |        ^^