feat!: remove parsing generator expressions
Parsing generator expressions statically is impossible since whether an argument is interpreted as a generator expression or not depends on the function itself. Hence, the parsing for it is removed.
This commit is contained in:
parent
a4bc80390f
commit
a414a4c83d
|
@ -35,20 +35,15 @@ module.exports = grammar({
|
|||
env_var: ($) => seq("$", "ENV", "{", $.variable, "}"),
|
||||
cache_var: ($) => seq("$", "CACHE", "{", $.variable, "}"),
|
||||
|
||||
gen_exp: ($) => seq("$", "<", optional($._gen_exp_content), ">"),
|
||||
_gen_exp_content: ($) => seq($.argument, optional($._gen_exp_arguments)),
|
||||
_gen_exp_arguments: ($) => seq(":", repeat(seq($.argument, optional(/[,;]/)))),
|
||||
|
||||
argument: ($) => choice($.bracket_argument, $.quoted_argument, $.unquoted_argument),
|
||||
_untrimmed_argument: ($) => choice(/\s/, $.bracket_comment, $.line_comment, $.argument, $._paren_argument),
|
||||
_paren_argument: ($) => seq("(", repeat($._untrimmed_argument), ")"),
|
||||
|
||||
quoted_argument: ($) => seq('"', optional($.quoted_element), '"'),
|
||||
quoted_element: ($) => repeat1(choice($.variable_ref, $.gen_exp, $._quoted_text, $.escape_sequence)),
|
||||
quoted_element: ($) => repeat1(choice($.variable_ref, $._quoted_text, $.escape_sequence)),
|
||||
_quoted_text: (_) => prec.left(repeat1(choice("$", /[^\\"]/))),
|
||||
|
||||
unquoted_argument: ($) =>
|
||||
prec.right(repeat1(choice($.variable_ref, $.gen_exp, $._unquoted_text, $.escape_sequence))),
|
||||
unquoted_argument: ($) => prec.right(repeat1(choice($.variable_ref, $._unquoted_text, $.escape_sequence))),
|
||||
_unquoted_text: (_) => prec.left(repeat1(choice("$", /[^()#"\\]/))),
|
||||
|
||||
body: ($) => prec.right(repeat1($._untrimmed_command_invocation)),
|
||||
|
|
91
src/grammar.json
generated
91
src/grammar.json
generated
|
@ -171,89 +171,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"gen_exp": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "$"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "<"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_gen_exp_content"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ">"
|
||||
}
|
||||
]
|
||||
},
|
||||
"_gen_exp_content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "argument"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_gen_exp_arguments"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"_gen_exp_arguments": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ":"
|
||||
},
|
||||
{
|
||||
"type": "REPEAT",
|
||||
"content": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "argument"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "PATTERN",
|
||||
"value": "[,;]"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"argument": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
|
@ -350,10 +267,6 @@
|
|||
"type": "SYMBOL",
|
||||
"name": "variable_ref"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "gen_exp"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_quoted_text"
|
||||
|
@ -397,10 +310,6 @@
|
|||
"type": "SYMBOL",
|
||||
"name": "variable_ref"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "gen_exp"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "_unquoted_text"
|
||||
|
|
35
src/node-types.json
generated
35
src/node-types.json
generated
|
@ -405,21 +405,6 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "gen_exp",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": true,
|
||||
"required": false,
|
||||
"types": [
|
||||
{
|
||||
"type": "argument",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "if_command",
|
||||
"named": true,
|
||||
|
@ -573,10 +558,6 @@
|
|||
"type": "escape_sequence",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gen_exp",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "variable_ref",
|
||||
"named": true
|
||||
|
@ -643,10 +624,6 @@
|
|||
"type": "escape_sequence",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "gen_exp",
|
||||
"named": true
|
||||
},
|
||||
{
|
||||
"type": "variable_ref",
|
||||
"named": true
|
||||
|
@ -754,22 +731,10 @@
|
|||
"type": ")",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ":",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ";",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "<",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ">",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "CACHE",
|
||||
"named": false
|
||||
|
|
29183
src/parser.c
generated
29183
src/parser.c
generated
File diff suppressed because it is too large
Load diff
66
test/corpus/regression.txt
Normal file
66
test/corpus/regression.txt
Normal file
|
@ -0,0 +1,66 @@
|
|||
======
|
||||
OpenCV
|
||||
======
|
||||
|
||||
if(dep MATCHES "^\\$<LINK_ONLY:([^>]+)>$")
|
||||
set(dep "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
if(dep MATCHES "^\\$<")
|
||||
message(WARNING "Unexpected CMake generator expression: ${dep}")
|
||||
endif()
|
||||
|
||||
---
|
||||
|
||||
(source_file
|
||||
(if_condition
|
||||
(if_command
|
||||
(if)
|
||||
(argument_list
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(quoted_argument
|
||||
(quoted_element
|
||||
(escape_sequence))))))
|
||||
(body
|
||||
(normal_command
|
||||
(identifier)
|
||||
(argument_list
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(quoted_argument
|
||||
(quoted_element
|
||||
(variable_ref
|
||||
(normal_var
|
||||
(variable)))))))))
|
||||
(endif_command
|
||||
(endif)))
|
||||
(if_condition
|
||||
(if_command
|
||||
(if)
|
||||
(argument_list
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(quoted_argument
|
||||
(quoted_element
|
||||
(escape_sequence))))))
|
||||
(body
|
||||
(normal_command
|
||||
(identifier)
|
||||
(argument_list
|
||||
(argument
|
||||
(unquoted_argument))
|
||||
(argument
|
||||
(quoted_argument
|
||||
(quoted_element
|
||||
(variable_ref
|
||||
(normal_var
|
||||
(variable)))))))))
|
||||
(endif_command
|
||||
(endif))))
|
Loading…
Reference in a new issue