module.exports = grammar({
name: 'ini',
extras: $ => [
$.comment,
$._blank,
/[\t ]/
],
rules: {
document: $ => seq(
repeat($._blank), optional(repeat(seq($.setting))),
repeat($.section),
),
section: $ => prec.left(seq(
$.section_name,
repeat(seq(
$.setting,
)),
)),
section_name: $ => seq(
'[',
alias(/[^\[\]]+/, $.text),
']',
/\r?\n/,
),
setting: $ => seq(
alias(/[^;#=\s\[]+( *[^;#=\s\[])*/, $.setting_name),
'=',
optional(alias(/.+/, $.setting_value)),
/\r?\n/,
),
comment: $ => seq(/[;#]/, alias(/[^\r\n]*/, $.text), /\r?\n/),
_blank: () => field('blank', /\r?\n/),
}
});