diff --git a/plugins/languages/treesitter/treesitter.nix b/plugins/languages/treesitter/treesitter.nix index 497d98bc..01257f01 100644 --- a/plugins/languages/treesitter/treesitter.nix +++ b/plugins/languages/treesitter/treesitter.nix @@ -328,5 +328,10 @@ helpers.neovim-plugin.mkNeovimPlugin config { foldmethod = mkDefault "expr"; foldexpr = mkDefault "nvim_treesitter#foldexpr()"; }; + + # Since https://github.com/NixOS/nixpkgs/pull/321550 upstream queries are added + # to grammar plugins. Exclude nvim-treesitter itself from combining to avoid + # collisions with grammar's queries + performance.combinePlugins.standalonePlugins = [ cfg.package ]; }; } diff --git a/tests/test-sources/plugins/languages/treesitter/combine-plugins.nix b/tests/test-sources/plugins/languages/treesitter/combine-plugins.nix new file mode 100644 index 00000000..074c95ad --- /dev/null +++ b/tests/test-sources/plugins/languages/treesitter/combine-plugins.nix @@ -0,0 +1,37 @@ +{ pkgs, ... }: +{ + combine-plugins = { + performance.combinePlugins.enable = true; + + plugins.treesitter = { + enable = true; + + # Exclude nixvim injections for test to pass + nixvimInjections = false; + }; + + extraConfigLuaPost = '' + -- Ensure that queries from nvim-treesitter are first in rtp + local queries_path = "${pkgs.vimPlugins.nvim-treesitter}/queries" + for name, type in vim.fs.dir(queries_path, {depth = 10}) do + if type == "file" then + -- Resolve all symlinks and compare nvim-treesitter's path with + -- whatever we've got from runtime + local nvim_treesitter_path = assert(vim.uv.fs_realpath(vim.fs.joinpath(queries_path, name))) + local rtp_path = assert( + vim.uv.fs_realpath(vim.api.nvim_get_runtime_file("queries/" .. name, false)[1]), + name .. " not found in runtime" + ) + assert( + nvim_treesitter_path == rtp_path, + string.format( + "%s from rtp (%s) is not the same as from nvim-treesitter (%s)", + name, + rtp_path, nvim_treesitter_path + ) + ) + end + end + ''; + }; +}