1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 00:37:35 +00:00

js: Use CodepointOriented spans and use the codepoint length of token

We were previously using byte-oriented spans. This would work if not for
token.line_column() being in codepoints.
This commit is contained in:
sin-ack 2021-09-01 16:13:53 +00:00 committed by Andreas Kling
parent 977b62a213
commit c93c54c656

View file

@ -1008,7 +1008,7 @@ int main(int argc, char** argv)
JS::Lexer lexer(line); JS::Lexer lexer(line);
bool indenters_starting_line = true; bool indenters_starting_line = true;
for (JS::Token token = lexer.next(); token.type() != JS::TokenType::Eof; token = lexer.next()) { for (JS::Token token = lexer.next(); token.type() != JS::TokenType::Eof; token = lexer.next()) {
auto length = token.value().length(); auto length = Utf8View { token.value() }.length();
auto start = token.line_column() - 1; auto start = token.line_column() - 1;
auto end = start + length; auto end = start + length;
if (indenters_starting_line) { if (indenters_starting_line) {
@ -1021,13 +1021,13 @@ int main(int argc, char** argv)
switch (token.category()) { switch (token.category()) {
case JS::TokenCategory::Invalid: case JS::TokenCategory::Invalid:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Red), Line::Style::Underline }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Red), Line::Style::Underline });
break; break;
case JS::TokenCategory::Number: case JS::TokenCategory::Number:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Magenta) }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Magenta) });
break; break;
case JS::TokenCategory::String: case JS::TokenCategory::String:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Green), Line::Style::Bold }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Green), Line::Style::Bold });
break; break;
case JS::TokenCategory::Punctuation: case JS::TokenCategory::Punctuation:
break; break;
@ -1037,18 +1037,18 @@ int main(int argc, char** argv)
switch (token.type()) { switch (token.type()) {
case JS::TokenType::BoolLiteral: case JS::TokenType::BoolLiteral:
case JS::TokenType::NullLiteral: case JS::TokenType::NullLiteral:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Yellow), Line::Style::Bold }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Yellow), Line::Style::Bold });
break; break;
default: default:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Blue), Line::Style::Bold }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Blue), Line::Style::Bold });
break; break;
} }
break; break;
case JS::TokenCategory::ControlKeyword: case JS::TokenCategory::ControlKeyword:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::Cyan), Line::Style::Italic }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::Cyan), Line::Style::Italic });
break; break;
case JS::TokenCategory::Identifier: case JS::TokenCategory::Identifier:
stylize({ start, end }, { Line::Style::Foreground(Line::Style::XtermColor::White), Line::Style::Bold }); stylize({ start, end, Line::Span::CodepointOriented }, { Line::Style::Foreground(Line::Style::XtermColor::White), Line::Style::Bold });
break; break;
default: default:
break; break;