From d748fb28216591c4fc82f5c33ed174be74562e03 Mon Sep 17 00:00:00 2001 From: Uy Ha Date: Tue, 15 Aug 2023 15:05:51 +0000 Subject: [PATCH] fix: stop excluding single quote (') in unquoted arguments --- corpus/unquoted_argument.txt | 18 ++++++++++++++++++ grammar.js | 2 +- src/grammar.json | 2 +- src/parser.c | 32 +++++++++++++++++--------------- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/corpus/unquoted_argument.txt b/corpus/unquoted_argument.txt index 803cbe5..f0316ad 100644 --- a/corpus/unquoted_argument.txt +++ b/corpus/unquoted_argument.txt @@ -136,3 +136,21 @@ message($var) ) ) ) + +===================================================== +Single quote in unquoted_argument [unquoted_argument] +===================================================== + +message(hello'world) + +--- +(source_file + (normal_command + (identifier) + (argument_list + (argument + (unquoted_argument) + ) + ) + ) +) diff --git a/grammar.js b/grammar.js index cc1eb7f..083c552 100644 --- a/grammar.js +++ b/grammar.js @@ -49,7 +49,7 @@ module.exports = grammar({ unquoted_argument: ($) => prec.right(repeat1(choice($.variable_ref, $.gen_exp, $._unquoted_text, $.escape_sequence))), - _unquoted_text: (_) => prec.left(repeat1(choice("$", /[^()#"\\']/))), + _unquoted_text: (_) => prec.left(repeat1(choice("$", /[^()#"\\]/))), body: ($) => prec.right(repeat1($._untrimmed_command_invocation)), argument_list: ($) => repeat1($._untrimmed_argument), diff --git a/src/grammar.json b/src/grammar.json index 9b4f21f..64b3080 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -427,7 +427,7 @@ }, { "type": "PATTERN", - "value": "[^()#\"\\\\']" + "value": "[^()#\"\\\\]" } ] } diff --git a/src/parser.c b/src/parser.c index f2ff736..fdee3a1 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1616,8 +1616,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\n' || lookahead == '\r') ADVANCE(42); if (lookahead != 0 && - lookahead != '#' && - lookahead != '\'') ADVANCE(49); + lookahead != '#') ADVANCE(49); END_STATE(); case 1: if (lookahead == '"') ADVANCE(45); @@ -1635,8 +1634,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == '\r' || lookahead == ' ') ADVANCE(42); if (lookahead != 0 && - lookahead != '#' && - lookahead != '\'') ADVANCE(49); + lookahead != '#') ADVANCE(49); END_STATE(); case 2: if (lookahead == '"') ADVANCE(45); @@ -1650,8 +1648,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == '\r' || lookahead == ' ') ADVANCE(42); if (lookahead != 0 && - lookahead != '#' && - lookahead != '\'') ADVANCE(49); + lookahead != '#') ADVANCE(49); END_STATE(); case 3: if (lookahead == '"') ADVANCE(45); @@ -1661,7 +1658,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\\') ADVANCE(13); if (lookahead != 0 && lookahead != '#' && - lookahead != '\'' && lookahead != '(') ADVANCE(49); END_STATE(); case 4: @@ -1677,7 +1673,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '{') ADVANCE(34); if (lookahead != 0 && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 5: if (lookahead == '"') ADVANCE(45); @@ -1688,7 +1685,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\\') ADVANCE(13); if (lookahead != 0 && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 6: if (lookahead == '"') ADVANCE(45); @@ -1709,7 +1707,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\\') ADVANCE(13); if (lookahead != 0 && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 8: if (lookahead == '"') ADVANCE(45); @@ -1744,7 +1743,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0 && lookahead != '"' && lookahead != '#' && - lookahead != '\'' && lookahead != '(') ADVANCE(49); END_STATE(); case 11: @@ -1760,7 +1758,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0 && lookahead != '"' && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 12: if (lookahead == '$') ADVANCE(33); @@ -1771,7 +1770,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0 && lookahead != '"' && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 13: if (lookahead == ';') ADVANCE(31); @@ -2053,7 +2053,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0 && lookahead != '"' && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 55: ACCEPT_TOKEN(aux_sym_endwhile_command_token1); @@ -2067,7 +2068,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0 && lookahead != '"' && lookahead != '#' && - (lookahead < '\'' || ')' < lookahead)) ADVANCE(49); + lookahead != '(' && + lookahead != ')') ADVANCE(49); END_STATE(); case 56: ACCEPT_TOKEN(aux_sym_endwhile_command_token1);