summary refs log tree commit diff
path: root/pkgs/development/tools/parsing/tree-sitter/grammar.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/parsing/tree-sitter/grammar.nix')
-rw-r--r--pkgs/development/tools/parsing/tree-sitter/grammar.nix42
1 files changed, 42 insertions, 0 deletions
diff --git a/pkgs/development/tools/parsing/tree-sitter/grammar.nix b/pkgs/development/tools/parsing/tree-sitter/grammar.nix
new file mode 100644
index 00000000000..f92e0d79426
--- /dev/null
+++ b/pkgs/development/tools/parsing/tree-sitter/grammar.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, tree-sitter
+}:
+
+# Build a parser grammar and put the resulting shared object in `$out/parser`
+
+{
+  # language name
+  language
+  # version of tree-sitter
+, version
+  # source for the language grammar
+, source
+}:
+
+stdenv.mkDerivation {
+
+  pname = "${language}-grammar";
+  inherit version;
+
+  src = source;
+
+  buildInputs = [ tree-sitter ];
+
+  dontUnpack = true;
+  configurePhase= ":";
+  buildPhase = ''
+    runHook preBuild
+    scanner_cc="$src/src/scanner.cc"
+    if [ ! -f "$scanner_cc" ]; then
+      scanner_cc=""
+    fi
+    $CC -I$src/src/ -shared -o parser -Os $src/src/parser.c $scanner_cc -lstdc++
+    runHook postBuild
+  '';
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    mv parser $out/
+    runHook postInstall
+  '';
+}