aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Seitz <sseitz@nvidia.com>2022-12-27 12:35:43 +0100
committerStephan Seitz <stephan.seitz@fau.de>2022-12-31 13:59:18 +0100
commit0598450eb80af38dbd071953f047afa0b574986f (patch)
tree2d12067287764ae9b9c9b7e2fb343415fd0b2229
parenthighlights(cuda): add missing `"__global__"` (diff)
downloadnvim-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.lua35
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