diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-08 09:29:17 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-21 19:20:41 +0100 |
| commit | a11252ae266ded70e47ede20e68a41f611d2280b (patch) | |
| tree | 943adaa7bd43d804ba2fbe2dc25d6ebb9ece26bd /src/librustc_parse/parser | |
| parent | b484faefab8bfd27d7ccf28aa5597e85591d2a90 (diff) | |
| download | rust-a11252ae266ded70e47ede20e68a41f611d2280b.tar.gz rust-a11252ae266ded70e47ede20e68a41f611d2280b.zip | |
extract recover_paren_lifetime
Diffstat (limited to 'src/librustc_parse/parser')
| -rw-r--r-- | src/librustc_parse/parser/ty.rs | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/librustc_parse/parser/ty.rs b/src/librustc_parse/parser/ty.rs index b9537100ce1..2b642ad2de7 100644 --- a/src/librustc_parse/parser/ty.rs +++ b/src/librustc_parse/parser/ty.rs @@ -386,21 +386,7 @@ impl<'a> Parser<'a> { self.error_opt_out_lifetime(question); bounds.push(GenericBound::Outlives(self.expect_lifetime())); if has_parens { - let inner_span = inner_lo.to(self.prev_span); - self.expect(&token::CloseDelim(token::Paren))?; - let mut err = self.struct_span_err( - lo.to(self.prev_span), - "parenthesized lifetime bounds are not supported" - ); - if let Ok(snippet) = self.span_to_snippet(inner_span) { - err.span_suggestion_short( - lo.to(self.prev_span), - "remove the parentheses", - snippet.to_owned(), - Applicability::MachineApplicable - ); - } - err.emit(); + self.recover_paren_lifetime(lo, inner_lo)?; } } else { let lifetime_defs = self.parse_late_bound_lifetime_defs()?; @@ -477,6 +463,26 @@ impl<'a> Parser<'a> { } } + /// Recover on `('lifetime)` with `(` already eaten. + fn recover_paren_lifetime(&mut self, lo: Span, inner_lo: Span) -> PResult<'a, ()> { + let inner_span = inner_lo.to(self.prev_span); + self.expect(&token::CloseDelim(token::Paren))?; + let mut err = self.struct_span_err( + lo.to(self.prev_span), + "parenthesized lifetime bounds are not supported" + ); + if let Ok(snippet) = self.span_to_snippet(inner_span) { + err.span_suggestion_short( + lo.to(self.prev_span), + "remove the parentheses", + snippet.to_owned(), + Applicability::MachineApplicable + ); + } + err.emit(); + Ok(()) + } + pub(super) fn parse_late_bound_lifetime_defs(&mut self) -> PResult<'a, Vec<GenericParam>> { if self.eat_keyword(kw::For) { self.expect_lt()?; |
