diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-01-11 21:33:57 -0800 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-01-11 21:33:57 -0800 |
| commit | 8119017746959f7ecb3ba93c6c32a7d6d9dafc40 (patch) | |
| tree | 5cffe809873c2d9b25f5e6e5c7db00c07063bd6e | |
| parent | 975f8b5e32cfcd368a245169dd3d3cc536b0cc28 (diff) | |
| download | rust-8119017746959f7ecb3ba93c6c32a7d6d9dafc40.tar.gz rust-8119017746959f7ecb3ba93c6c32a7d6d9dafc40.zip | |
Continue evaluating after finding incorrect .. in pattern
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/parser/pat-tuple-2.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/parser/pat-tuple-2.stderr | 16 | ||||
| -rw-r--r-- | src/test/ui/parser/pat-tuple-3.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/parser/pat-tuple-3.stderr | 16 |
5 files changed, 42 insertions, 11 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index ce9db4d0468..6228598ab61 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3814,8 +3814,12 @@ impl<'a> Parser<'a> { ddpos = Some(fields.len()); } else { // Emit a friendly error, ignore `..` and continue parsing - self.span_err(self.prev_span, - "`..` can only be used once per tuple or tuple struct pattern"); + self.struct_span_err( + self.prev_span, + "`..` can only be used once per tuple or tuple struct pattern", + ) + .span_label(self.prev_span, "can only be used once per pattern") + .emit(); } } else if !self.check(&token::CloseDelim(token::Paren)) { fields.push(self.parse_pat(None)?); @@ -3831,7 +3835,10 @@ impl<'a> Parser<'a> { if ddpos == Some(fields.len()) && trailing_comma { // `..` needs to be followed by `)` or `, pat`, `..,)` is disallowed. - self.span_err(self.prev_span, "trailing comma is not permitted after `..`"); + let msg = "trailing comma is not permitted after `..`"; + self.struct_span_err(self.prev_span, msg) + .span_label(self.prev_span, msg) + .emit(); } Ok((fields, ddpos, trailing_comma)) diff --git a/src/test/ui/parser/pat-tuple-2.rs b/src/test/ui/parser/pat-tuple-2.rs index 108278fa58e..574cb6045dc 100644 --- a/src/test/ui/parser/pat-tuple-2.rs +++ b/src/test/ui/parser/pat-tuple-2.rs @@ -1,5 +1,7 @@ fn main() { match 0 { - (pat, ..,) => {} //~ ERROR trailing comma is not permitted after `..` + (pat, ..,) => {} + //~^ ERROR trailing comma is not permitted after `..` + //~| ERROR mismatched types } } diff --git a/src/test/ui/parser/pat-tuple-2.stderr b/src/test/ui/parser/pat-tuple-2.stderr index ec123363566..178be83d9bf 100644 --- a/src/test/ui/parser/pat-tuple-2.stderr +++ b/src/test/ui/parser/pat-tuple-2.stderr @@ -1,8 +1,18 @@ error: trailing comma is not permitted after `..` --> $DIR/pat-tuple-2.rs:3:17 | -LL | (pat, ..,) => {} //~ ERROR trailing comma is not permitted after `..` - | ^ +LL | (pat, ..,) => {} + | ^ trailing comma is not permitted after `..` -error: aborting due to previous error +error[E0308]: mismatched types + --> $DIR/pat-tuple-2.rs:3:9 + | +LL | (pat, ..,) => {} + | ^^^^^^^^^^ expected integer, found tuple + | + = note: expected type `{integer}` + found type `(_,)` + +error: aborting due to 2 previous errors +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/parser/pat-tuple-3.rs b/src/test/ui/parser/pat-tuple-3.rs index 63dcde45bfb..33edb0007e7 100644 --- a/src/test/ui/parser/pat-tuple-3.rs +++ b/src/test/ui/parser/pat-tuple-3.rs @@ -1,5 +1,7 @@ fn main() { match 0 { - (.., pat, ..) => {} //~ ERROR `..` can only be used once per tuple or tuple struct pattern + (.., pat, ..) => {} + //~^ ERROR `..` can only be used once per tuple or tuple struct pattern + //~| ERROR mismatched types } } diff --git a/src/test/ui/parser/pat-tuple-3.stderr b/src/test/ui/parser/pat-tuple-3.stderr index 90940eb1723..fcb657393b8 100644 --- a/src/test/ui/parser/pat-tuple-3.stderr +++ b/src/test/ui/parser/pat-tuple-3.stderr @@ -1,8 +1,18 @@ error: `..` can only be used once per tuple or tuple struct pattern --> $DIR/pat-tuple-3.rs:3:19 | -LL | (.., pat, ..) => {} //~ ERROR `..` can only be used once per tuple or tuple struct pattern - | ^^ +LL | (.., pat, ..) => {} + | ^^ can only be used once per pattern -error: aborting due to previous error +error[E0308]: mismatched types + --> $DIR/pat-tuple-3.rs:3:9 + | +LL | (.., pat, ..) => {} + | ^^^^^^^^^^^^^ expected integer, found tuple + | + = note: expected type `{integer}` + found type `(_,)` + +error: aborting due to 2 previous errors +For more information about this error, try `rustc --explain E0308`. |
