tree-sitter-d2/grammar.js

51 lines
1.0 KiB
JavaScript

module.exports = grammar({
name: "d2",
externals: ($) => [$._identifier],
rules: {
// TODO: add the actual grammar rules
source_file: ($) => repeat($._definition),
_definition: ($) => choice($.connection, $.shape),
_end: ($) => choice(";", "\n"),
connection: ($) =>
seq(
field("left", $.identifier),
$.arrow,
field("right", $.identifier),
$._end
),
shape: ($) =>
prec.left(
seq(
field("id", $.identifier),
optional(seq(":", field("label", $.label))),
$._end
)
),
label: ($) => choice($.string, /[^\n{]+/),
identifier: ($) => $._identifier,
arrow: ($) =>
choice(
seq("--", repeat("-")),
seq("<-", repeat("-")),
seq("<-", repeat("-"), ">"),
seq(repeat("-"), "->")
),
string: ($) =>
choice(
seq("'", repeat(token(/[^'\n]+/)), "'"),
seq('"', repeat(token(/[^'\n]+/)), '"'),
seq("`", repeat(token(/[^'\n]+/)), "`")
),
},
});