From a11252ae266ded70e47ede20e68a41f611d2280b Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sun, 8 Dec 2019 09:29:17 +0100 Subject: extract recover_paren_lifetime --- src/librustc_parse/parser/ty.rs | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'src/librustc_parse') 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> { if self.eat_keyword(kw::For) { self.expect_lt()?; -- cgit 1.4.1-3-g733a5