Add eat_char2 for the lexer (#6968)

## Summary

This PR adds a new helper method on the `Cursor` called `eat_char2`
which is similar to `eat_char` but accepts 2 characters instead of 1. It'll
`bump` the cursor twice if both characters are found on lookahead.

## Test Plan

`cargo test`
This commit is contained in:
Dhruv Manilawala 2023-08-29 17:18:02 +05:30 committed by GitHub
parent 715d86dae9
commit 4d49d5e845
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 13 deletions

View file

@ -515,13 +515,7 @@ impl<'source> Lexer<'source> {
// If the next two characters are also the quote character, then we have a triple-quoted
// string; consume those two characters and ensure that we require a triple-quote to close
let triple_quoted = if self.cursor.first() == quote && self.cursor.second() == quote {
self.cursor.bump();
self.cursor.bump();
true
} else {
false
};
let triple_quoted = self.cursor.eat_char2(quote, quote);
let value_start = self.offset();
@ -544,9 +538,7 @@ impl<'source> Lexer<'source> {
}
Some(c) if c == quote => {
if triple_quoted {
if self.cursor.first() == quote && self.cursor.second() == quote {
self.cursor.bump();
self.cursor.bump();
if self.cursor.eat_char2(quote, quote) {
break self.offset() - TextSize::new(3);
}
} else {
@ -918,9 +910,7 @@ impl<'source> Lexer<'source> {
'.' => {
if self.cursor.first().is_ascii_digit() {
self.lex_decimal_number('.')?
} else if self.cursor.first() == '.' && self.cursor.second() == '.' {
self.cursor.bump();
self.cursor.bump();
} else if self.cursor.eat_char2('.', '.') {
Tok::Ellipsis
} else {
Tok::Dot