about summary refs log tree commit diff stats
path: root/tree-sitter-yts/package.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tree-sitter-yts/package.nix59
1 files changed, 59 insertions, 0 deletions
diff --git a/tree-sitter-yts/package.nix b/tree-sitter-yts/package.nix
new file mode 100644
index 0000000..11ab5a8
--- /dev/null
+++ b/tree-sitter-yts/package.nix
@@ -0,0 +1,59 @@
+# taken from nixpgks: pkgs/development/tools/parsing/tree-sitter/grammar.nix
+{
+  stdenv,
+  nodejs,
+  tree-sitter,
+  lib,
+}:
+# # Build a parser grammar and put the resulting shared object in `$out/parser`
+# {
+#   # language name
+#   language ? "yts",
+#   version ? "1.0.0",
+#   src ? ./.,
+#   location ? null,
+#   generate ? false,
+#   ...
+# } @ args:
+stdenv.mkDerivation {
+  pname = "yts-grammar";
+  version = "1.0.0";
+
+  src = ./.;
+
+  nativeBuildInputs = [nodejs tree-sitter];
+
+  CFLAGS = ["-Isrc" "-O2"];
+  CXXFLAGS = ["-Isrc" "-O2"];
+
+  stripDebugList = ["parser"];
+
+  configurePhase = ''
+    tree-sitter generate
+  '';
+
+  # When both scanner.{c,cc} exist, we should not link both since they may be the same but in
+  # different languages. Just randomly prefer C++ if that happens.
+  buildPhase = ''
+    runHook preBuild
+    if [[ -e src/scanner.cc ]]; then
+      $CXX -fPIC -c src/scanner.cc -o scanner.o $CXXFLAGS
+    elif [[ -e src/scanner.c ]]; then
+      $CC -fPIC -c src/scanner.c -o scanner.o $CFLAGS
+    fi
+    $CC -fPIC -c src/parser.c -o parser.o $CFLAGS
+    rm -rf parser
+    $CXX -shared -o parser *.o
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    mv parser $out/
+    if [[ -d queries ]]; then
+      cp -r queries $out
+    fi
+    runHook postInstall
+  '';
+}