about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-12-31 03:36:45 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2019-12-31 04:33:34 +0100
commit2e812c1c5f1502487bdcbeef938c3dbe6a0d7e05 (patch)
treec6fd37320f64a0cbf8f14385ecd6643e5d2706c7
parent6fba12591217cd4f1980e0d6fc5b2dee897799d1 (diff)
downloadrust-2e812c1c5f1502487bdcbeef938c3dbe6a0d7e05.tar.gz
rust-2e812c1c5f1502487bdcbeef938c3dbe6a0d7e05.zip
parser::pat: remove .fatal calls
-rw-r--r--src/librustc_parse/parser/pat.rs26
-rw-r--r--src/test/ui/parser/brace-after-qualified-path-in-match.stderr4
-rw-r--r--src/test/ui/parser/paren-after-qualified-path-in-match.stderr4
-rw-r--r--src/test/ui/suggestions/vec-macro-in-pattern.stderr3
4 files changed, 23 insertions, 14 deletions
diff --git a/src/librustc_parse/parser/pat.rs b/src/librustc_parse/parser/pat.rs
index 4895d5428df..e608b86c76a 100644
--- a/src/librustc_parse/parser/pat.rs
+++ b/src/librustc_parse/parser/pat.rs
@@ -673,7 +673,7 @@ impl<'a> Parser<'a> {
         let expected = expected.unwrap_or("pattern");
         let msg = format!("expected {}, found {}", expected, super::token_descr(&self.token));
 
-        let mut err = self.fatal(&msg);
+        let mut err = self.struct_span_err(self.token.span, &msg);
         err.span_label(self.token.span, format!("expected {}", expected));
 
         let sp = self.sess.source_map().start_point(self.token.span);
@@ -807,12 +807,8 @@ impl<'a> Parser<'a> {
     /// Parse a struct ("record") pattern (e.g. `Foo { ... }` or `Foo::Bar { ... }`).
     fn parse_pat_struct(&mut self, qself: Option<QSelf>, path: Path) -> PResult<'a, PatKind> {
         if qself.is_some() {
-            let msg = "unexpected `{` after qualified path";
-            let mut err = self.fatal(msg);
-            err.span_label(self.token.span, msg);
-            return Err(err);
+            return self.error_qpath_before_pat(&path, "{");
         }
-
         self.bump();
         let (fields, etc) = self.parse_pat_fields().unwrap_or_else(|mut e| {
             e.emit();
@@ -826,15 +822,22 @@ impl<'a> Parser<'a> {
     /// Parse tuple struct or tuple variant pattern (e.g. `Foo(...)` or `Foo::Bar(...)`).
     fn parse_pat_tuple_struct(&mut self, qself: Option<QSelf>, path: Path) -> PResult<'a, PatKind> {
         if qself.is_some() {
-            let msg = "unexpected `(` after qualified path";
-            let mut err = self.fatal(msg);
-            err.span_label(self.token.span, msg);
-            return Err(err);
+            return self.error_qpath_before_pat(&path, "(");
         }
         let (fields, _) = self.parse_paren_comma_seq(|p| p.parse_pat_with_or_inner())?;
         Ok(PatKind::TupleStruct(path, fields))
     }
 
+    /// Error when there's a qualified path, e.g. `<Foo as Bar>::Baz`
+    /// as the path of e.g., a tuple or record struct pattern.
+    fn error_qpath_before_pat(&mut self, path: &Path, token: &str) -> PResult<'a, PatKind> {
+        let msg = &format!("unexpected `{}` after qualified path", token);
+        let mut err = self.struct_span_err(self.token.span, msg);
+        err.span_label(self.token.span, msg);
+        err.span_label(path.span, "the qualified path");
+        Err(err)
+    }
+
     /// Parses the fields of a struct-like pattern.
     fn parse_pat_fields(&mut self) -> PResult<'a, (Vec<FieldPat>, bool)> {
         let mut fields = Vec::new();
@@ -877,7 +880,8 @@ impl<'a> Parser<'a> {
                     break;
                 }
                 let token_str = super::token_descr(&self.token);
-                let mut err = self.fatal(&format!("expected `}}`, found {}", token_str));
+                let msg = &format!("expected `}}`, found {}", token_str);
+                let mut err = self.struct_span_err(self.token.span, msg);
 
                 err.span_label(self.token.span, "expected `}`");
                 let mut comma_sp = None;
diff --git a/src/test/ui/parser/brace-after-qualified-path-in-match.stderr b/src/test/ui/parser/brace-after-qualified-path-in-match.stderr
index 4c49e3122c7..d6fdf353f07 100644
--- a/src/test/ui/parser/brace-after-qualified-path-in-match.stderr
+++ b/src/test/ui/parser/brace-after-qualified-path-in-match.stderr
@@ -2,7 +2,9 @@ error: unexpected `{` after qualified path
   --> $DIR/brace-after-qualified-path-in-match.rs:3:27
    |
 LL |         <T as Trait>::Type{key: value} => (),
-   |                           ^ unexpected `{` after qualified path
+   |         ------------------^ unexpected `{` after qualified path
+   |         |
+   |         the qualified path
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/parser/paren-after-qualified-path-in-match.stderr b/src/test/ui/parser/paren-after-qualified-path-in-match.stderr
index 79460e01f25..af21f919546 100644
--- a/src/test/ui/parser/paren-after-qualified-path-in-match.stderr
+++ b/src/test/ui/parser/paren-after-qualified-path-in-match.stderr
@@ -2,7 +2,9 @@ error: unexpected `(` after qualified path
   --> $DIR/paren-after-qualified-path-in-match.rs:3:27
    |
 LL |         <T as Trait>::Type(2) => (),
-   |                           ^ unexpected `(` after qualified path
+   |         ------------------^ unexpected `(` after qualified path
+   |         |
+   |         the qualified path
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/suggestions/vec-macro-in-pattern.stderr b/src/test/ui/suggestions/vec-macro-in-pattern.stderr
index 59ca8ebbf63..1634fdde7d2 100644
--- a/src/test/ui/suggestions/vec-macro-in-pattern.stderr
+++ b/src/test/ui/suggestions/vec-macro-in-pattern.stderr
@@ -5,11 +5,12 @@ LL |         Some(vec![_x]) => (),
    |              ^^^^^^^^
    |              |
    |              unexpected `(` after qualified path
+   |              the qualified path
    |              in this macro invocation
    |              help: use a slice pattern here instead: `[_x]`
    |
    = help: for more information, see https://doc.rust-lang.org/edition-guide/rust-2018/slice-patterns.html
-   = note: this warning originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
+   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
 
 error: aborting due to previous error