File: //home/ubuntu/neovim/.deps/build/src/treesitter_vim/rules/utils.js
function key_val_arg(arg, ...args) {
if (args.length > 0) {
return seq(field("name", arg), token.immediate("="), field("val", ...args));
} else return field("name", arg);
}
function maybe_bang($, cmd_name) {
return seq(cmd_name, optional($.bang));
}
function _to_case_insensitive(a) {
var ca = a.charCodeAt(0);
if (ca >= 97 && ca <= 122) return `[${a}${a.toUpperCase()}]`;
if (ca >= 65 && ca <= 90) return `[${a.toLowerCase()}${a}]`;
return a;
}
function case_insensitive(keyword) {
return new RegExp(keyword.split("").map(_to_case_insensitive).join(""));
}
function keyword(gram, name) {
return alias(gram["_" + name], name);
}
function sub_cmd(sub, ...args) {
if (args.length > 0) {
return seq(field("sub", sub), ...args);
} else {
return field("sub", sub);
}
}
function commaSep(rule) {
return optional(commaSep1(rule));
}
function commaSep1(rule) {
return sep1(rule, ",");
}
function sep1(rule, separator) {
return seq(rule, repeat(seq(separator, rule)));
}
function command($, cmd, ...args) {
return seq(keyword($, cmd), ...args);
}
function bang_command($, cmd, ...args) {
return seq(maybe_bang($, keyword($, cmd)), ...args);
}
module.exports = {
key_val_arg,
maybe_bang,
keyword,
sub_cmd,
commaSep,
commaSep1,
sep1,
command,
bang_command,
case_insensitive,
};