tree-sitter-uci/grammar.js
2023-06-27 15:02:54 +03:00

50 lines
969 B
JavaScript

module.exports = grammar(
{
name: 'uci',
extras: $ => [
$.comment,
/[\s\p{Zs}\uFEFF\u2060\u200B]/,
],
rules: {
config_file: $ => repeat(choice(
$.package,
$.config
)),
_name_fragment: $ => /[A-Za-z0-9_]+/,
name: $ => choice(
$._name_fragment,
seq('"', $._name_fragment, '"'),
seq("'", $._name_fragment, "'"),
),
string: $ => choice(
/"[^"\\]*"/,
/'[^'\\]*'/,
/[^'"\s]+/
),
config: $ => seq(
"config",
field("type", $.name),
optional(field("name", $.name)),
repeat(choice($.option, $.list))
),
package: $ => prec.right(seq(
"package",
$.name,
repeat($.config)
)),
option: $ => seq(
"option",
field("key", $.name),
field("value", $.string),
),
list: $ => seq(
"list",
field("key", $.name),
field("value", $.string),
),
comment: $ => token(seq("#", /.*/))
}
});