aboutsummaryrefslogtreecommitdiffstats
path: root/tree-sitter-yts
diff options
context:
space:
mode:
Diffstat (limited to 'tree-sitter-yts')
-rw-r--r--tree-sitter-yts/grammar.js61
1 files changed, 58 insertions, 3 deletions
diff --git a/tree-sitter-yts/grammar.js b/tree-sitter-yts/grammar.js
index 2b36254..cf76d78 100644
--- a/tree-sitter-yts/grammar.js
+++ b/tree-sitter-yts/grammar.js
@@ -11,7 +11,62 @@ export default grammar({
name: "yts",
rules: {
- // TODO: add the actual grammar rules
- source_file: $ => "hello"
- }
+ source_file: ($) => repeat(choice($.line, $.comment)),
+ line: ($) =>
+ seq(
+ $.command,
+ repeat($.flag),
+ $.id,
+ $.title,
+ $.date,
+ $.author,
+ $.duration,
+ $.url,
+ "\n",
+ ),
+
+ command: ($) =>
+ choice(
+ "pick",
+ "p",
+ "watch",
+ "w",
+ "watched",
+ "wd",
+ "add",
+ "a",
+ "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, choice("[No release date]", /\d{4}-\d{2}-\d{2}/), $._q),
+ author: ($) => seq($._q, choice("[No author]", /[^"]+/), $._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/],
});