Fix comments being regconized incorrectly inside quoted arguments

This commit is contained in:
Uy Ha 2021-06-30 21:17:16 +02:00
parent 52cbc7add1
commit 44a026bbf5
5 changed files with 10092 additions and 11202 deletions

View file

@ -116,3 +116,43 @@ message("${var_${var}}")
) )
) )
) )
======================================================================
Lookalike bracket comment inside quoted argument [quoted_argument]
======================================================================
message("${var_${var}} #[[comment]]")
---
(source_file
(normal_command
(identifier)
(argument
(quoted_argument
(quoted_element
(variable_ref (normal_var (variable (variable_ref (normal_var (variable))))))
)
)
)
)
)
======================================================================
Lookalike line comment inside quoted argument [quoted_argument]
======================================================================
message("${var_${var}} #comment")
---
(source_file
(normal_command
(identifier)
(argument
(quoted_argument
(quoted_element
(variable_ref (normal_var (variable (variable_ref (normal_var (variable))))))
)
)
)
)
)

View file

@ -17,7 +17,7 @@ module.exports = grammar({
name: "cmake", name: "cmake",
externals: ($) => [$.bracket_argument, $.bracket_comment, $.line_comment], externals: ($) => [$.bracket_argument, $.bracket_comment, $.line_comment],
extras: ($) => [$.bracket_comment, $.line_comment], extras: (_) => [],
rules: { rules: {
source_file: ($) => repeat($._untrimmed_command_invocation), source_file: ($) => repeat($._untrimmed_command_invocation),
@ -34,7 +34,7 @@ module.exports = grammar({
cache_var: ($) => seq("$", "CACHE", "{", $.variable, "}"), cache_var: ($) => seq("$", "CACHE", "{", $.variable, "}"),
argument: ($) => choice($.bracket_argument, $.quoted_argument, $.unquoted_argument), argument: ($) => choice($.bracket_argument, $.quoted_argument, $.unquoted_argument),
_untrimmed_argument: ($) => choice(/\s/, $.argument), _untrimmed_argument: ($) => choice(/\s/, $.bracket_comment, $.line_comment, $.argument),
quoted_argument: ($) => seq('"', optional($.quoted_element), '"'), quoted_argument: ($) => seq('"', optional($.quoted_element), '"'),
quoted_element: ($) => repeat1(choice($.variable_ref, /[^\\"]/, $.escape_sequence)), quoted_element: ($) => repeat1(choice($.variable_ref, /[^\\"]/, $.escape_sequence)),
@ -72,7 +72,7 @@ module.exports = grammar({
_command_invocation: ($) => _command_invocation: ($) =>
choice($.normal_command, $.if_condition, $.foreach_loop, $.while_loop, $.function_def, $.macro_def), choice($.normal_command, $.if_condition, $.foreach_loop, $.while_loop, $.function_def, $.macro_def),
_untrimmed_command_invocation: ($) => choice(/\s/, $._command_invocation), _untrimmed_command_invocation: ($) => choice(/\s/, $.bracket_comment, $.line_comment, $._command_invocation),
...commandNames(...commands), ...commandNames(...commands),
identifier: (_) => /[A-Za-z_][A-Za-z0-9_]*/, identifier: (_) => /[A-Za-z_][A-Za-z0-9_]*/,

View file

@ -186,6 +186,14 @@
"type": "PATTERN", "type": "PATTERN",
"value": "\\s" "value": "\\s"
}, },
{
"type": "SYMBOL",
"name": "bracket_comment"
},
{
"type": "SYMBOL",
"name": "line_comment"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "argument" "name": "argument"
@ -872,6 +880,14 @@
"type": "PATTERN", "type": "PATTERN",
"value": "\\s" "value": "\\s"
}, },
{
"type": "SYMBOL",
"name": "bracket_comment"
},
{
"type": "SYMBOL",
"name": "line_comment"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_command_invocation" "name": "_command_invocation"
@ -935,16 +951,7 @@
"value": "[+-]*\\d+" "value": "[+-]*\\d+"
} }
}, },
"extras": [ "extras": [],
{
"type": "SYMBOL",
"name": "bracket_comment"
},
{
"type": "SYMBOL",
"name": "line_comment"
}
],
"conflicts": [], "conflicts": [],
"precedences": [], "precedences": [],
"externals": [ "externals": [

View file

@ -68,9 +68,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "elseif", "type": "elseif",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -106,9 +114,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endfunction", "type": "endfunction",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -144,9 +160,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endmacro", "type": "endmacro",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -202,9 +226,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "foreach", "type": "foreach",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -217,6 +249,10 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endforeach_command", "type": "endforeach_command",
"named": true "named": true
@ -237,6 +273,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_def", "type": "macro_def",
"named": true "named": true
@ -264,9 +304,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "function", "type": "function",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -279,6 +327,10 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endfunction_command", "type": "endfunction_command",
"named": true "named": true
@ -299,6 +351,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_def", "type": "macro_def",
"named": true "named": true
@ -326,9 +382,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "if", "type": "if",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -341,6 +405,10 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "else_command", "type": "else_command",
"named": true "named": true
@ -369,6 +437,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_def", "type": "macro_def",
"named": true "named": true
@ -396,6 +468,14 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro", "type": "macro",
"named": true "named": true
@ -411,6 +491,10 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endmacro_command", "type": "endmacro_command",
"named": true "named": true
@ -427,6 +511,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_command", "type": "macro_command",
"named": true "named": true
@ -458,9 +546,17 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "identifier", "type": "identifier",
"named": true "named": true
},
{
"type": "line_comment",
"named": true
} }
] ]
} }
@ -522,6 +618,10 @@
"multiple": true, "multiple": true,
"required": false, "required": false,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "foreach_loop", "type": "foreach_loop",
"named": true "named": true
@ -534,6 +634,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_def", "type": "macro_def",
"named": true "named": true
@ -622,6 +726,14 @@
"type": "argument", "type": "argument",
"named": true "named": true
}, },
{
"type": "bracket_comment",
"named": true
},
{
"type": "line_comment",
"named": true
},
{ {
"type": "while", "type": "while",
"named": true "named": true
@ -637,6 +749,10 @@
"multiple": true, "multiple": true,
"required": true, "required": true,
"types": [ "types": [
{
"type": "bracket_comment",
"named": true
},
{ {
"type": "endwhile_command", "type": "endwhile_command",
"named": true "named": true
@ -653,6 +769,10 @@
"type": "if_condition", "type": "if_condition",
"named": true "named": true
}, },
{
"type": "line_comment",
"named": true
},
{ {
"type": "macro_def", "type": "macro_def",
"named": true "named": true

21101
src/parser.c

File diff suppressed because it is too large Load diff