fix: stop excluding single quote (') in unquoted arguments

This commit is contained in:
Uy Ha 2023-08-15 15:05:51 +00:00
parent 3dfc596025
commit d748fb2821
4 changed files with 37 additions and 17 deletions

View file

@ -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)
)
)
)
)

View file

@ -49,7 +49,7 @@ module.exports = grammar({
unquoted_argument: ($) => unquoted_argument: ($) =>
prec.right(repeat1(choice($.variable_ref, $.gen_exp, $._unquoted_text, $.escape_sequence))), 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)), body: ($) => prec.right(repeat1($._untrimmed_command_invocation)),
argument_list: ($) => repeat1($._untrimmed_argument), argument_list: ($) => repeat1($._untrimmed_argument),

View file

@ -427,7 +427,7 @@
}, },
{ {
"type": "PATTERN", "type": "PATTERN",
"value": "[^()#\"\\\\']" "value": "[^()#\"\\\\]"
} }
] ]
} }

View file

@ -1616,8 +1616,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead == '\n' || if (lookahead == '\n' ||
lookahead == '\r') ADVANCE(42); lookahead == '\r') ADVANCE(42);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#') ADVANCE(49);
lookahead != '\'') ADVANCE(49);
END_STATE(); END_STATE();
case 1: case 1:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1635,8 +1634,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
lookahead == '\r' || lookahead == '\r' ||
lookahead == ' ') ADVANCE(42); lookahead == ' ') ADVANCE(42);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#') ADVANCE(49);
lookahead != '\'') ADVANCE(49);
END_STATE(); END_STATE();
case 2: case 2:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1650,8 +1648,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
lookahead == '\r' || lookahead == '\r' ||
lookahead == ' ') ADVANCE(42); lookahead == ' ') ADVANCE(42);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#') ADVANCE(49);
lookahead != '\'') ADVANCE(49);
END_STATE(); END_STATE();
case 3: case 3:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1661,7 +1658,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead == '\\') ADVANCE(13); if (lookahead == '\\') ADVANCE(13);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#' &&
lookahead != '\'' &&
lookahead != '(') ADVANCE(49); lookahead != '(') ADVANCE(49);
END_STATE(); END_STATE();
case 4: case 4:
@ -1677,7 +1673,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead == '{') ADVANCE(34); if (lookahead == '{') ADVANCE(34);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 5: case 5:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1688,7 +1685,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead == '\\') ADVANCE(13); if (lookahead == '\\') ADVANCE(13);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 6: case 6:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1709,7 +1707,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead == '\\') ADVANCE(13); if (lookahead == '\\') ADVANCE(13);
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 8: case 8:
if (lookahead == '"') ADVANCE(45); if (lookahead == '"') ADVANCE(45);
@ -1744,7 +1743,6 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '"' && lookahead != '"' &&
lookahead != '#' && lookahead != '#' &&
lookahead != '\'' &&
lookahead != '(') ADVANCE(49); lookahead != '(') ADVANCE(49);
END_STATE(); END_STATE();
case 11: case 11:
@ -1760,7 +1758,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '"' && lookahead != '"' &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 12: case 12:
if (lookahead == '$') ADVANCE(33); if (lookahead == '$') ADVANCE(33);
@ -1771,7 +1770,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '"' && lookahead != '"' &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 13: case 13:
if (lookahead == ';') ADVANCE(31); if (lookahead == ';') ADVANCE(31);
@ -2053,7 +2053,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '"' && lookahead != '"' &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 55: case 55:
ACCEPT_TOKEN(aux_sym_endwhile_command_token1); ACCEPT_TOKEN(aux_sym_endwhile_command_token1);
@ -2067,7 +2068,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
if (lookahead != 0 && if (lookahead != 0 &&
lookahead != '"' && lookahead != '"' &&
lookahead != '#' && lookahead != '#' &&
(lookahead < '\'' || ')' < lookahead)) ADVANCE(49); lookahead != '(' &&
lookahead != ')') ADVANCE(49);
END_STATE(); END_STATE();
case 56: case 56:
ACCEPT_TOKEN(aux_sym_endwhile_command_token1); ACCEPT_TOKEN(aux_sym_endwhile_command_token1);