diff options
Diffstat (limited to 'pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix')
-rw-r--r-- | pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix index 2b8ba7616ae62..f1c72991a5064 100644 --- a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix +++ b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix @@ -1,4 +1,4 @@ -{ lib, callPackage, tree-sitter, nodejs }: +{ lib, callPackage, tree-sitter, neovim, runCommand }: self: super: @@ -14,18 +14,18 @@ let # ocaml-interface # tree-sitter-ocaml-interface # tree-sitter-ocaml_interface - builtGrammars = generatedGrammars // lib.listToAttrs - (lib.concatLists (lib.mapAttrsToList - (k: v: - let - replaced = lib.replaceStrings [ "_" ] [ "-" ] k; - in - map (lib.flip lib.nameValuePair v) - ([ ("tree-sitter-${k}") ] ++ lib.optionals (k != replaced) [ - replaced - "tree-sitter-${replaced}" - ])) - generatedDerivations)); + builtGrammars = generatedGrammars // lib.concatMapAttrs + (k: v: + let + replaced = lib.replaceStrings [ "_" ] [ "-" ] k; + in + { + "tree-sitter-${k}" = v; + } // lib.optionalAttrs (k != replaced) { + ${replaced} = v; + "tree-sitter-${replaced}" = v; + }) + generatedDerivations; allGrammars = lib.attrValues generatedDerivations; @@ -34,27 +34,65 @@ let # or for all grammars: # pkgs.vimPlugins.nvim-treesitter.withAllGrammars withPlugins = - grammarFn: self.nvim-treesitter.overrideAttrs (_: { - postPatch = - let - grammars = tree-sitter.withPlugins (ps: grammarFn (ps // builtGrammars)); - in - '' - rm -r parser - ln -s ${grammars} parser - ''; + f: self.nvim-treesitter.overrideAttrs (_: { + passthru.dependencies = map + (grammar: + let + name = lib.pipe grammar [ + lib.getName + + # added in buildGrammar + (lib.removeSuffix "-grammar") + + # grammars from tree-sitter.builtGrammars + (lib.removePrefix "tree-sitter-") + (lib.replaceStrings [ "-" ] [ "_" ]) + ]; + in + + runCommand "nvim-treesitter-${name}-grammar" { } '' + mkdir -p $out/parser + ln -s ${grammar}/parser $out/parser/${name}.so + '' + ) + (f (tree-sitter.builtGrammars // builtGrammars)); }); + + withAllGrammars = withPlugins (_: allGrammars); in { + postPatch = '' + rm -r parser + ''; + passthru = { - inherit builtGrammars allGrammars withPlugins; + inherit builtGrammars allGrammars withPlugins withAllGrammars; + + tests.check-queries = + let + nvimWithAllGrammars = neovim.override { + configure.packages.all.start = [ withAllGrammars ]; + }; + in + runCommand "nvim-treesitter-check-queries" + { + nativeBuildInputs = [ nvimWithAllGrammars ]; + CI = true; + } + '' + touch $out + export HOME=$(mktemp -d) + ln -s ${withAllGrammars}/CONTRIBUTING.md . - tests.builtGrammars = lib.recurseIntoAttrs builtGrammars; + nvim --headless "+luafile ${withAllGrammars}/scripts/check-queries.lua" | tee log - withAllGrammars = withPlugins (_: allGrammars); + if grep -q Warning log; then + echo "Error: warnings were emitted by the check" + exit 1 + fi + ''; }; meta.maintainers = with lib.maintainers; [ figsoda ]; } - |