about summary refs log tree commit diff
path: root/pkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py')
-rwxr-xr-xpkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/pkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py b/pkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py
new file mode 100755
index 0000000000000..117c7eb481231
--- /dev/null
+++ b/pkgs/by-name/ne/neovim-unwrapped/update-treesitter-parsers.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p python3
+
+import re
+import subprocess
+from pathlib import Path
+
+parsers = {}
+dir = Path(__file__).parent
+regex = re.compile(r"^TREESITTER_([A-Z_]+)_(URL|SHA256)\s+(.+)$")
+
+src = subprocess.check_output(
+    [
+        "nix-build",
+        dir.parent.parent.parent.parent,
+        "-A",
+        "neovim-unwrapped.src",
+        "--no-out-link",
+    ],
+    text=True,
+).strip()
+
+for line in open(f"{src}/cmake.deps/deps.txt"):
+    m = regex.fullmatch(line.strip())
+    if m is None:
+        continue
+
+    lang = m[1].lower()
+    ty = m[2]
+    val = m[3]
+
+    if not lang in parsers:
+        parsers[lang] = {}
+    parsers[lang][ty] = val
+
+with open(dir / "treesitter-parsers.nix", "w") as f:
+    f.write("{ fetchurl }:\n\n{\n")
+    for lang, src in parsers.items():
+        f.write(
+            f"""  {lang}.src = fetchurl {{
+    url = "{src["URL"]}";
+    hash = "sha256:{src["SHA256"]}";
+  }};
+"""
+        )
+    f.write("}\n")