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",
externals: ($) => [$.bracket_argument, $.bracket_comment, $.line_comment],
extras: ($) => [$.bracket_comment, $.line_comment],
extras: (_) => [],
rules: {
source_file: ($) => repeat($._untrimmed_command_invocation),
@ -34,7 +34,7 @@ module.exports = grammar({
cache_var: ($) => seq("$", "CACHE", "{", $.variable, "}"),
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_element: ($) => repeat1(choice($.variable_ref, /[^\\"]/, $.escape_sequence)),
@ -72,7 +72,7 @@ module.exports = grammar({
_command_invocation: ($) =>
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),
identifier: (_) => /[A-Za-z_][A-Za-z0-9_]*/,

View file

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

View file

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

21101
src/parser.c

File diff suppressed because it is too large Load diff