diff options
| author | Stephan Seitz <sseitz@nvidia.com> | 2022-12-27 12:35:43 +0100 |
|---|---|---|
| committer | Stephan Seitz <stephan.seitz@fau.de> | 2022-12-31 13:59:18 +0100 |
| commit | 0598450eb80af38dbd071953f047afa0b574986f (patch) | |
| tree | 2d12067287764ae9b9c9b7e2fb343415fd0b2229 | |
| parent | highlights(cuda): add missing `"__global__"` (diff) | |
| download | nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar.gz nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar.bz2 nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar.lz nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar.xz nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.tar.zst nvim-treesitter-0598450eb80af38dbd071953f047afa0b574986f.zip | |
feat: also reload parsers after uninstallation
| -rw-r--r-- | lua/nvim-treesitter/install.lua | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/lua/nvim-treesitter/install.lua b/lua/nvim-treesitter/install.lua index 2942f5117..1b16d5e01 100644 --- a/lua/nvim-treesitter/install.lua +++ b/lua/nvim-treesitter/install.lua @@ -43,6 +43,26 @@ local function get_job_status() end ---@param lang string +---@return function +local function reattach_if_possible_fn(lang) + return function() + for _, buf in ipairs(vim.api.nvim_list_bufs()) do + if parsers.get_buf_lang(buf) == lang then + vim._ts_remove_language(lang) + local ok = pcall(vim.treesitter.language.require_language, lang) + for _, mod in ipairs(require("nvim-treesitter.configs").available_modules()) do + if ok then + require("nvim-treesitter.configs").reattach_module(mod, buf) + else + require("nvim-treesitter.configs").detach_module(mod, buf) + end + end + end + end + end +end + +---@param lang string ---@param validate boolean|nil ---@return InstallInfo local function get_parser_install_info(lang, validate) @@ -384,17 +404,7 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync, end, }, { -- auto-attach modules after installation - cmd = function() - for _, buf in ipairs(vim.api.nvim_list_bufs()) do - if parsers.get_buf_lang(buf) == lang then - vim._ts_remove_language(lang) - vim.treesitter.language.require_language(lang) - for _, mod in ipairs(require("nvim-treesitter.configs").available_modules()) do - require("nvim-treesitter.configs").reattach_module(mod, buf) - end - end - end - end, + cmd = reattach_if_possible_fn(lang), }, }) if not from_local_path then @@ -594,6 +604,9 @@ function M.uninstall(...) end end, }, + { -- auto-reattach or detach modules after uninstallation + cmd = reattach_if_possible_fn(lang), + }, } M.iter_cmd(command_list, 1, lang, "Treesitter parser for " .. lang .. " has been uninstalled") elseif #all_parsers > 0 then |
