oxc_parser/lexer/
punctuation.rs1use super::{Kind, Lexer, Token};
2
3impl Lexer<'_> {
4 pub(super) fn read_dot(&mut self) -> Kind {
6 if self.peek_2_bytes() == Some([b'.', b'.']) {
7 self.consume_2_chars();
8 return Kind::Dot3;
9 }
10 if self.peek_byte().is_some_and(|b| b.is_ascii_digit()) {
11 self.decimal_literal_after_decimal_point()
12 } else {
13 Kind::Dot
14 }
15 }
16
17 pub(super) fn read_left_angle(&mut self) -> Option<Kind> {
19 match self.peek_byte() {
20 Some(b'<') => {
21 self.consume_char();
22 if self.next_ascii_byte_eq(b'=') {
23 Some(Kind::ShiftLeftEq)
24 } else {
25 Some(Kind::ShiftLeft)
26 }
27 }
28 Some(b'=') => {
29 self.consume_char();
30 Some(Kind::LtEq)
31 }
32 Some(b'!') if self.source_type.is_script() && self.remaining().starts_with("!--") => {
33 None
34 }
35 _ => Some(Kind::LAngle),
36 }
37 }
38
39 pub(super) fn read_minus(&mut self) -> Option<Kind> {
41 match self.peek_byte() {
42 Some(b'-') => {
43 self.consume_char();
44 if self.token.is_on_new_line()
45 && self.source_type.is_script()
46 && self.next_ascii_byte_eq(b'>')
47 {
48 None
49 } else {
50 Some(Kind::Minus2)
51 }
52 }
53 Some(b'=') => {
54 self.consume_char();
55 Some(Kind::MinusEq)
56 }
57 _ => Some(Kind::Minus),
58 }
59 }
60
61 pub(crate) fn re_lex_right_angle(&mut self) -> Token {
62 self.token.set_start(self.offset());
63 let kind = self.read_right_angle();
64 self.finish_next(kind)
65 }
66
67 fn read_right_angle(&mut self) -> Kind {
68 if self.next_ascii_byte_eq(b'>') {
69 if self.next_ascii_byte_eq(b'>') {
70 if self.next_ascii_byte_eq(b'=') { Kind::ShiftRight3Eq } else { Kind::ShiftRight3 }
71 } else if self.next_ascii_byte_eq(b'=') {
72 Kind::ShiftRightEq
73 } else {
74 Kind::ShiftRight
75 }
76 } else if self.next_ascii_byte_eq(b'=') {
77 Kind::GtEq
78 } else {
79 Kind::RAngle
80 }
81 }
82}