Skip to content

Commit a3e1585

Browse files
refactor(parser): Reduce backtracking for literal type node parsing (#11426)
- Replace use of `lookahead` when parsing assertion signatures in favour of checkpoint and rewinds. - Remove unnecessary backtracking when parsing literal type nodes. Relates to #11334 as part of reducing unnecessary backtracking from the parser.
1 parent ed57fa3 commit a3e1585

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

crates/oxc_parser/src/ts/types.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,15 @@ impl<'a> ParserImpl<'a> {
365365
self.parse_literal_type_node(/* negative */ false)
366366
}
367367
Kind::Minus => {
368-
if self.lookahead(Self::is_next_token_number) {
369-
self.parse_literal_type_node(/* negative */ true)
368+
let checkpoint = self.checkpoint();
369+
let minus_start_span = self.start_span();
370+
371+
self.bump_any(); // bump `-`
372+
373+
if self.cur_kind().is_number() {
374+
self.parse_rest_of_literal_type_node(minus_start_span, /* negative */ true)
370375
} else {
376+
self.rewind(checkpoint);
371377
self.parse_type_reference()
372378
}
373379
}
@@ -941,6 +947,10 @@ impl<'a> ParserImpl<'a> {
941947
self.bump_any(); // bump `-`
942948
}
943949

950+
self.parse_rest_of_literal_type_node(span, negative)
951+
}
952+
953+
fn parse_rest_of_literal_type_node(&mut self, span: u32, negative: bool) -> TSType<'a> {
944954
let expression = if self.at(Kind::NoSubstitutionTemplate) {
945955
self.parse_template_literal_expression(false)
946956
} else {

0 commit comments

Comments
 (0)