about summary refs log tree commit diff stats
path: root/pkgs/sources/tree-sitter-yts/grammar.js
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-20 16:10:21 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-20 16:14:26 +0200
commit368cb6b0d25db2ae23be42ad51584de059997e51 (patch)
tree3282e45d3ebced63c8498a47e83a255c35de620b /pkgs/sources/tree-sitter-yts/grammar.js
parentrefactor(hm): Rename to `modules/home` (diff)
downloadnixos-config-368cb6b0d25db2ae23be42ad51584de059997e51.tar.gz
nixos-config-368cb6b0d25db2ae23be42ad51584de059997e51.zip
refactor(sys): Modularize and move to `modules/system` or `pkgs`
Diffstat (limited to 'pkgs/sources/tree-sitter-yts/grammar.js')
-rw-r--r--pkgs/sources/tree-sitter-yts/grammar.js26
1 files changed, 26 insertions, 0 deletions
diff --git a/pkgs/sources/tree-sitter-yts/grammar.js b/pkgs/sources/tree-sitter-yts/grammar.js
new file mode 100644
index 00000000..655f6dea
--- /dev/null
+++ b/pkgs/sources/tree-sitter-yts/grammar.js
@@ -0,0 +1,26 @@
+module.exports = grammar({
+  name: "yts",
+
+  rules: {
+    source_file: ($) => repeat(choice($.line, $.comment)),
+    line: ($) =>
+      seq($.command, $.id, $.title, $.date, $.author, $.duration, $.url, "\n"),
+
+    command: ($) => choice("pick", "p", "watch", "w", "drop", "d", "url", "u"),
+    id: ($) => /[0-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/, /\\\r?\n/],
+});