diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2018-02-07 08:30:47 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-07 08:30:47 -0800 |
| commit | aee22556a97aac4b921efb806b26fbb60a6b8a92 (patch) | |
| tree | 3f0ecfbabe72844da2e25a0d94c4cbeeb1095fb1 /src/libsyntax/parse/parser.rs | |
| parent | 4f93357d3b8938dfe439329c43c1e4f919a70869 (diff) | |
| parent | fd3f2312a75bcc4c8121ad324a012c3b8befb61c (diff) | |
| download | rust-aee22556a97aac4b921efb806b26fbb60a6b8a92.tar.gz rust-aee22556a97aac4b921efb806b26fbb60a6b8a92.zip | |
Rollup merge of #47613 - estebank:rustc_on_unimplemented, r=nikomatsakis
Add filtering options to `rustc_on_unimplemented` - Add filtering options to `rustc_on_unimplemented` for local traits, filtering on `Self` and type arguments. - Add a way to provide custom notes. - Tweak binops text. - Add filter to detect wether `Self` is local or belongs to another crate. - Add filter to `Iterator` diagnostic for `&str`. Partly addresses #44755 with a different syntax, as a first approach. Fixes #46216, fixes #37522, CC #34297, #46806.
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 764b3d0a848..dc3745fc4a3 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -761,6 +761,18 @@ impl<'a> Parser<'a> { }) } + fn expected_ident_found(&self) -> DiagnosticBuilder<'a> { + let mut err = self.struct_span_err(self.span, + &format!("expected identifier, found {}", + self.this_token_descr())); + if let Some(token_descr) = self.token_descr() { + err.span_label(self.span, format!("expected identifier, found {}", token_descr)); + } else { + err.span_label(self.span, "expected identifier"); + } + err + } + pub fn parse_ident(&mut self) -> PResult<'a, ast::Ident> { self.parse_ident_common(true) } @@ -769,15 +781,7 @@ impl<'a> Parser<'a> { match self.token { token::Ident(i) => { if self.token.is_reserved_ident() { - let mut err = self.struct_span_err(self.span, - &format!("expected identifier, found {}", - self.this_token_descr())); - if let Some(token_descr) = self.token_descr() { - err.span_label(self.span, format!("expected identifier, found {}", - token_descr)); - } else { - err.span_label(self.span, "expected identifier"); - } + let mut err = self.expected_ident_found(); if recover { err.emit(); } else { @@ -791,14 +795,7 @@ impl<'a> Parser<'a> { Err(if self.prev_token_kind == PrevTokenKind::DocComment { self.span_fatal_err(self.prev_span, Error::UselessDocComment) } else { - let mut err = self.fatal(&format!("expected identifier, found `{}`", - self.this_token_to_string())); - if let Some(token_descr) = self.token_descr() { - err.span_label(self.span, format!("expected identifier, found {}", - token_descr)); - } else { - err.span_label(self.span, "expected identifier"); - } + let mut err = self.expected_ident_found(); if self.token == token::Underscore { err.note("`_` is a wildcard pattern, not an identifier"); } |
