aboutsummaryrefslogtreecommitdiffstats
path: root/tree-sitter-yts/grammar.js
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-04 20:45:29 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-11-04 20:45:29 +0100
commit676cc2b5619ecd517df42b07dbc2c22449a47179 (patch)
tree622546b5b6df3cc05171a1b016365ffd612abcd6 /tree-sitter-yts/grammar.js
parentstyle(yt/main): Use consistent use qualifications (diff)
downloadyt-676cc2b5619ecd517df42b07dbc2c22449a47179.zip
refactor(tree-sitter-yts): Move in tree
Diffstat (limited to '')
-rw-r--r--tree-sitter-yts/grammar.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/tree-sitter-yts/grammar.js b/tree-sitter-yts/grammar.js
new file mode 100644
index 0000000..8a9d61f
--- /dev/null
+++ b/tree-sitter-yts/grammar.js
@@ -0,0 +1,42 @@
+module.exports = grammar({
+ name: "yts",
+
+ rules: {
+ source_file: ($) => repeat(choice($.line, $.comment)),
+ line: ($) =>
+ seq($.command, repeat($.flag), $.id, $.title, $.date, $.author, $.duration, $.url, "\n"),
+
+ command: ($) => choice("pick", "p", "watch", "w", "drop", "d", "url", "u"),
+ flag: ($) =>
+ choice(
+ /-\w [^\s]+/,
+ /-\w '[^']*'/,
+ /-\w "[^"]*"/,
+ /-\w=[^\s]+/,
+ /-\w='[^']*'/,
+ /-\w="[^"]*"/,
+
+ /--\w[\w-]+ [^\s]+/,
+ /--\w[\w-]+ '[^']*'/,
+ /--\w[\w-]+ "[^"]*"/,
+ /--\w[\w-]+=[^\s]+/,
+ /--\w[\w-]+='[^']*'/,
+ /--\w[\w-]+="[^"]*"/,
+ ),
+ id: ($) => /[a-z0-9]+/,
+ title: ($) => seq($._q, /[^"]+/, $._q),
+ date: ($) => seq($._q, /\d{4}-\d{2}-\d{2}/, $._q),
+ author: ($) => seq($._q, /[^"]+/, $._q),
+ duration: ($) =>
+ seq(
+ $._q,
+ seq(choice("[No Duration]", /\d+m \d+s/, /\d+h \d+m/)),
+ $._q,
+ ),
+ url: ($) => seq($._q, /[^"]+/, $._q),
+ comment: ($) => /#.*/,
+ _q: ($) => $.quote,
+ quote: ($) => /"/,
+ },
+ extras: ($) => [/\s/],
+});