2025-03-11 23:49:16 +08:00
|
|
|
{
|
|
|
|
|
lib,
|
|
|
|
|
srcs,
|
|
|
|
|
stdenv,
|
2025-10-28 23:22:41 +08:00
|
|
|
runCommandLocal,
|
2025-07-13 06:04:55 +08:00
|
|
|
}:
|
|
|
|
|
let
|
|
|
|
|
buildGrammar =
|
|
|
|
|
grammar:
|
2025-02-05 00:07:13 +08:00
|
|
|
stdenv.mkDerivation {
|
|
|
|
|
pname = "helix-tree-sitter-${grammar.name}";
|
2025-03-11 23:49:16 +08:00
|
|
|
version = grammar.version;
|
|
|
|
|
src = grammar.src;
|
|
|
|
|
# sourceRoot = "source";
|
2025-02-05 00:07:13 +08:00
|
|
|
|
2025-05-25 14:04:21 +08:00
|
|
|
dontConfigure = true;
|
2025-02-05 00:07:13 +08:00
|
|
|
|
|
|
|
|
FLAGS = [
|
|
|
|
|
"-Isrc"
|
|
|
|
|
"-g"
|
|
|
|
|
"-O3"
|
|
|
|
|
"-fPIC"
|
|
|
|
|
"-fno-exceptions"
|
|
|
|
|
"-Wl,-z,relro,-z,now"
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
NAME = grammar.name;
|
|
|
|
|
|
|
|
|
|
buildPhase = ''
|
|
|
|
|
runHook preBuild
|
|
|
|
|
|
|
|
|
|
if [[ -e src/scanner.cc ]]; then
|
|
|
|
|
$CXX -c src/scanner.cc -o scanner.o $FLAGS
|
|
|
|
|
elif [[ -e src/scanner.c ]]; then
|
|
|
|
|
$CC -c src/scanner.c -o scanner.o $FLAGS
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
$CC -c src/parser.c -o parser.o $FLAGS
|
|
|
|
|
$CXX -shared -o $NAME.so *.o
|
|
|
|
|
|
|
|
|
|
ls -al
|
|
|
|
|
|
|
|
|
|
runHook postBuild
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
installPhase = ''
|
|
|
|
|
runHook preInstall
|
|
|
|
|
|
|
|
|
|
mkdir $out
|
|
|
|
|
mv $NAME.so $out/
|
|
|
|
|
|
|
|
|
|
runHook postInstall
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
fixupPhase = lib.optionalString stdenv.isLinux ''
|
|
|
|
|
runHook preFixup
|
|
|
|
|
|
|
|
|
|
$STRIP $out/$NAME.so
|
|
|
|
|
|
|
|
|
|
runHook postFixup
|
|
|
|
|
'';
|
|
|
|
|
};
|
2025-11-07 23:54:49 +08:00
|
|
|
grammars = with lib; pipe srcs [ (filterAttrs (key: _: hasPrefix "tree-sitter-" key)) ];
|
2025-03-14 06:55:26 +08:00
|
|
|
|
|
|
|
|
queries =
|
2025-11-07 23:54:49 +08:00
|
|
|
with lib;
|
|
|
|
|
pipe grammars [
|
|
|
|
|
(mapAttrsToList (
|
|
|
|
|
_: value: ''
|
|
|
|
|
mkdir -p $out/${value.name}
|
|
|
|
|
|
|
|
|
|
ln -s ${value.src}/queries/* $out/${value.name}/
|
|
|
|
|
''
|
|
|
|
|
))
|
|
|
|
|
];
|
2025-03-14 06:55:26 +08:00
|
|
|
grammarLinks =
|
2025-11-07 23:54:49 +08:00
|
|
|
with lib;
|
|
|
|
|
pipe grammars [
|
|
|
|
|
(builtins.mapAttrs (
|
|
|
|
|
_: v: {
|
|
|
|
|
inherit (v) name;
|
|
|
|
|
value = buildGrammar v;
|
|
|
|
|
}
|
|
|
|
|
))
|
|
|
|
|
(mapAttrsToList (_: value: "ln -s ${value.value}/${value.name}.so $out/${value.name}.so"))
|
|
|
|
|
];
|
2025-10-28 23:22:41 +08:00
|
|
|
grammarDir = runCommandLocal "helix-grammars" { } ''
|
2025-03-07 00:25:18 +08:00
|
|
|
mkdir -p $out
|
|
|
|
|
|
|
|
|
|
${builtins.concatStringsSep "\n" grammarLinks}
|
|
|
|
|
'';
|
2025-10-28 23:22:41 +08:00
|
|
|
queryDir = runCommandLocal "helix-query" { } ''
|
2025-03-07 00:25:18 +08:00
|
|
|
mkdir -p $out
|
|
|
|
|
|
|
|
|
|
${builtins.concatStringsSep "\n" queries}
|
|
|
|
|
'';
|
2025-02-05 00:07:13 +08:00
|
|
|
in
|
2025-10-28 23:22:41 +08:00
|
|
|
runCommandLocal "helix-runtime" { } ''
|
2025-07-13 06:04:55 +08:00
|
|
|
mkdir -p $out
|
2025-03-07 00:25:18 +08:00
|
|
|
|
2025-07-13 06:04:55 +08:00
|
|
|
ln -s ${grammarDir} $out/grammars
|
|
|
|
|
ln -s ${queryDir} $out/queries
|
|
|
|
|
''
|