From 0598450eb80af38dbd071953f047afa0b574986f Mon Sep 17 00:00:00 2001 From: Stephan Seitz Date: Tue, 27 Dec 2022 12:35:43 +0100 Subject: feat: also reload parsers after uninstallation --- lua/nvim-treesitter/install.lua | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'lua') 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 @@ -42,6 +42,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 @@ -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 -- cgit v1.2.3-70-g09d2