diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2019-03-20 11:45:25 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2019-03-20 11:45:25 -0700 |
| commit | a8120d660a47559b7ae8eb798bb8f6e62d575000 (patch) | |
| tree | 879c1f9370f928f5e954aba80318ee86fcd4e48d /src/libsyntax/parse/parser.rs | |
| parent | 7cf074a1e655ac07d04d045667278fa1a9970b93 (diff) | |
| download | rust-a8120d660a47559b7ae8eb798bb8f6e62d575000.tar.gz rust-a8120d660a47559b7ae8eb798bb8f6e62d575000.zip | |
Tweak incorrect escaped char diagnostic
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index aa70c54a1ef..48702cf3c4c 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4229,19 +4229,24 @@ impl<'a> Parser<'a> { fn parse_pat_list(&mut self) -> PResult<'a, (Vec<P<Pat>>, Option<usize>, bool)> { let mut fields = Vec::new(); let mut ddpos = None; + let mut prev_dd_sp = None; let mut trailing_comma = false; loop { if self.eat(&token::DotDot) { if ddpos.is_none() { ddpos = Some(fields.len()); + prev_dd_sp = Some(self.prev_span); } else { // Emit a friendly error, ignore `..` and continue parsing - self.struct_span_err( + let mut err = 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(); + ); + err.span_label(self.prev_span, "can only be used once per pattern"); + if let Some(sp) = prev_dd_sp { + err.span_label(sp, "previously present here"); + } + err.emit(); } } else if !self.check(&token::CloseDelim(token::Paren)) { fields.push(self.parse_pat(None)?); |
