emacs.pkgs.tree-sitter-langs: Link to each grammar's query files

Create symlinks to the query files provided by the grammars. This
makes syntax highlighting works properly for languages which
tree-sitter-langs doesn't provide query files and updates the ones it
provides to the latest upstream files.
This commit is contained in:
talyz 2022-08-25 18:40:41 +02:00
parent 784686d06c
commit faee7f1311
No known key found for this signature in database
GPG key ID: 2DED2151F4671A2B

View file

@ -17,7 +17,8 @@ let
inherit (melpaStablePackages) tree-sitter-langs;
libSuffix = if stdenv.isDarwin then "dylib" else "so";
soName = g: lib.removeSuffix "-grammar" (lib.removePrefix "tree-sitter-" g.pname) + "." + libSuffix;
langName = g: lib.removeSuffix "-grammar" (lib.removePrefix "tree-sitter-" g.pname);
soName = g: langName g + "." + libSuffix;
grammarDir = runCommand "emacs-tree-sitter-grammars" {
# Fake same version number as upstream language bundle to prevent triggering runtime downloads
@ -28,6 +29,7 @@ let
'' + lib.concatStringsSep "\n" (map (
g: "ln -s ${g}/parser $out/langs/bin/${soName g}") plugins
));
siteDir = "$out/share/emacs/site-lisp/elpa/${tree-sitter-langs.pname}-${tree-sitter-langs.version}";
in
melpaStablePackages.tree-sitter-langs.overrideAttrs(old: {
@ -36,6 +38,19 @@ melpaStablePackages.tree-sitter-langs.overrideAttrs(old: {
--replace "tree-sitter-langs-grammar-dir tree-sitter-langs--dir" "tree-sitter-langs-grammar-dir \"${grammarDir}/langs\""
'';
postInstall =
old.postInstall or ""
+ lib.concatStringsSep "\n"
(map
(g: ''
if [[ -d "${g}/queries" ]]; then
mkdir -p ${siteDir}/queries/${langName g}/
for f in ${g}/queries/*; do
ln -sfn "$f" ${siteDir}/queries/${langName g}/
done
fi
'') plugins);
passthru = old.passthru or {} // {
inherit plugins;
withPlugins = fn: final.tree-sitter-langs.override { plugins = fn tree-sitter-grammars; };