diff --git a/lexer/src/lib.rs b/lexer/src/lib.rs index 9da836f..e98a20b 100644 --- a/lexer/src/lib.rs +++ b/lexer/src/lib.rs @@ -139,7 +139,7 @@ pub enum Token<'a> { Minus, #[token("*", accept_expression)] Star, - #[token("/", parse_regex_or_slash)] + #[token("/", parse_regex_or_op)] Slash, /// Not generated by Logos directly. Regex(Slice<'a>), @@ -160,7 +160,7 @@ pub enum Token<'a> { MinusAssign, #[token("*=", accept_expression)] StarAssign, - #[token("/=", accept_expression)] + /// Not generated by Logos directly. SlashAssign, #[token("%=", accept_expression)] PercentAssign, @@ -313,7 +313,7 @@ fn parse_string<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result> parse_content::(lex) } -fn parse_regex_or_slash<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result> { +fn parse_regex_or_op<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result> { match lex.extras.ctx { Context::AcceptExpression => { accept_operator(lex); @@ -321,7 +321,12 @@ fn parse_regex_or_slash<'a>(lex: &mut logos::Lexer<'a, Token<'a>>) -> Result { accept_expression(lex); - Ok(Token::Slash) + if lex.remainder().first() == Some(&b'=') { + lex.bump(1); + Ok(Token::SlashAssign) + } else { + Ok(Token::Slash) + } } } }