diff --git a/src/scanner.c b/src/scanner.c index d429fcba..79aaeb91 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -131,7 +131,6 @@ static bool scan_automatic_semicolon(TSLexer *lexer, bool comment_condition, boo switch (lexer->lookahead) { case ',': - case '.': case ':': case ';': case '*': @@ -148,6 +147,11 @@ static bool scan_automatic_semicolon(TSLexer *lexer, bool comment_condition, boo case '/': return false; + // Insert a semicolon before decimals literals but not otherwise. + case '.': + skip(lexer); + return iswdigit(lexer->lookahead); + // Insert a semicolon before `--` and `++`, but not before binary `+` or `-`. case '+': skip(lexer); diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index b5a54456..4a617652 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -13,6 +13,7 @@ Numbers 0b1_000_000 1_2_3 12_3.4_5e6_7 +.4_5e6_7 0b1_000_000n 01 00000123 @@ -33,6 +34,7 @@ Numbers (expression_statement (number)) (expression_statement (number)) (expression_statement (number)) + (expression_statement (number)) (expression_statement (number))) ============================================