diff --git a/src/scanner.c b/src/scanner.c index 795916dd..78ac80e1 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -26,6 +26,8 @@ static inline void advance(TSLexer *lexer) { lexer->advance(lexer, false); } static inline void skip(TSLexer *lexer) { lexer->advance(lexer, true); } +static inline bool is_identifier_char(int32_t c) { return iswalnum(c) || c == '_' || c == '$'; } + static bool scan_template_chars(TSLexer *lexer) { lexer->result_symbol = TEMPLATE_CHARS; for (bool has_content = false;; has_content = true) { @@ -199,7 +201,7 @@ static bool scan_automatic_semicolon(TSLexer *lexer, bool comment_condition, boo } skip(lexer); - if (!iswalpha(lexer->lookahead)) { + if (!is_identifier_char(lexer->lookahead)) { return false; } @@ -210,7 +212,7 @@ static bool scan_automatic_semicolon(TSLexer *lexer, bool comment_condition, boo skip(lexer); } - if (!iswalpha(lexer->lookahead)) { + if (!is_identifier_char(lexer->lookahead)) { return false; } break; diff --git a/test/corpus/semicolon_insertion.txt b/test/corpus/semicolon_insertion.txt index 75cca226..f7367245 100644 --- a/test/corpus/semicolon_insertion.txt +++ b/test/corpus/semicolon_insertion.txt @@ -130,6 +130,18 @@ a a instanceofX; +a + in_b; + +a + in1; + +a + in$; + +a + instanceof_; + --- (program @@ -146,6 +158,18 @@ a (expression_statement (binary_expression (identifier) (identifier))) + (expression_statement (identifier)) + (expression_statement (identifier)) + + (expression_statement (identifier)) + (expression_statement (identifier)) + + (expression_statement (identifier)) + (expression_statement (identifier)) + + (expression_statement (identifier)) + (expression_statement (identifier)) + (expression_statement (identifier)) (expression_statement (identifier)))