aboutsummaryrefslogtreecommitdiffstats
path: root/tree-sitter-yts/grammar.js
diff options
context:
space:
mode:
Diffstat (limited to 'tree-sitter-yts/grammar.js')
-rw-r--r--tree-sitter-yts/grammar.js80
1 files changed, 12 insertions, 68 deletions
diff --git a/tree-sitter-yts/grammar.js b/tree-sitter-yts/grammar.js
index 7576228..2b36254 100644
--- a/tree-sitter-yts/grammar.js
+++ b/tree-sitter-yts/grammar.js
@@ -1,73 +1,17 @@
-// yt - A fully featured command line YouTube client
-//
-// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-// SPDX-License-Identifier: GPL-3.0-or-later
-//
-// This file is part of Yt.
-//
-// You should have received a copy of the License along with this program.
-// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+/**
+ * @file Parser for yt's selection language
+ * @author Benedikt Peetz <benedikt.peetz@b-peetz.de>
+ * @license GPL-3-or-later
+ */
-module.exports = grammar({
+/// <reference types="tree-sitter-cli/dsl" />
+// @ts-check
+
+export default 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",
- "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/],
+ // TODO: add the actual grammar rules
+ source_file: $ => "hello"
+ }
});