diff options
| author | kiyan <yazdani.kiyan@protonmail.com> | 2022-04-09 14:41:07 +0200 |
|---|---|---|
| committer | Christian Clason <christian.clason@uni-due.de> | 2022-04-10 11:10:12 +0200 |
| commit | 7141393f1284f518e4393da24ebda0a03111e6fd (patch) | |
| tree | 46c7f01fc9ffa18958de4bd5cba5e4ecb4283780 | |
| parent | feat: add curly interpolation support for astro (diff) | |
| download | nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar.gz nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar.bz2 nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar.lz nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar.xz nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.tar.zst nvim-treesitter-7141393f1284f518e4393da24ebda0a03111e6fd.zip | |
fix(modules): enabling disabling per buffer and globally
When a module is disabled by default in the config, running
TSBufEnable will not enable the module because the is_enabled
function will always return false, thus the module not being enabled.
Also, disabling/enabling the buffers is flaky.
This commit adds per buffer check when the module is not disabled. It
also makes the enable and disable more indempotent.
i've also renamed TS*All to TS*.
Fixes #2754
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | doc/nvim-treesitter.txt | 12 | ||||
| -rw-r--r-- | lua/nvim-treesitter/configs.lua | 48 |
3 files changed, 45 insertions, 19 deletions
@@ -136,8 +136,8 @@ Each module can also be enabled or disabled interactively through the following ```vim :TSBufEnable {module} " enable module on current buffer :TSBufDisable {module} " disable module on current buffer -:TSEnableAll {module} [{ft}] " enable module on every buffer. If filetype is specified, enable only for this filetype. -:TSDisableAll {module} [{ft}] " disable module on every buffer. If filetype is specified, disable only for this filetype. +:TSEnable {module} [{ft}] " enable module on every buffer. If filetype is specified, enable only for this filetype. +:TSDisable {module} [{ft}] " disable module on every buffer. If filetype is specified, disable only for this filetype. :TSModuleInfo [{module}] " list information about modules state for each filetype ``` diff --git a/doc/nvim-treesitter.txt b/doc/nvim-treesitter.txt index b6995ebc5..7ffa43f2b 100644 --- a/doc/nvim-treesitter.txt +++ b/doc/nvim-treesitter.txt @@ -269,8 +269,8 @@ Toggle (enable if disabled, disable if enabled) {module} on the current buffer. A list of modules can be found at |:TSModuleInfo| - *:TSEnableAll* -:TSEnableAll {module} [{language}]~ + *:TSEnable* +:TSEnable {module} [{language}]~ Enable {module} for the session. If {language} is specified, enable module for the session only for this @@ -278,8 +278,8 @@ particular language. A list of modules can be found at |:TSModuleInfo| A list of languages can be found at |:TSInstallInfo| - *:TSDisableAll* -:TSDisableAll {module} [{language}]~ + *:TSDisable* +:TSDisable {module} [{language}]~ Disable {module} for the session. If {language} is specified, disable module for the session only for this @@ -287,8 +287,8 @@ particular language. A list of modules can be found at |:TSModuleInfo| A list of languages can be found at |:TSInstallInfo| - *:TSToggleAll* -:TSToggleAll {module} [{language}]~ + *:TSToggle* +:TSToggle {module} [{language}]~ Toggle (enable if disabled, disable if enabled) {module} for the session. If {language} is specified, toggle module for the session only for this diff --git a/lua/nvim-treesitter/configs.lua b/lua/nvim-treesitter/configs.lua index 7e6b0a7b9..d4aa98e89 100644 --- a/lua/nvim-treesitter/configs.lua +++ b/lua/nvim-treesitter/configs.lua @@ -72,8 +72,22 @@ end -- @param bufnr buffer number, defaults to current buffer -- @param lang language, defaults to current language local function enable_module(mod, bufnr, lang) + local module = M.get_module(mod) + if not module then + return + end + bufnr = bufnr or api.nvim_get_current_buf() lang = lang or parsers.get_buf_lang(bufnr) + + if not module.enable then + if module.enabled_buffers then + module.enabled_buffers[bufnr] = true + else + module.enabled_buffers = { [bufnr] = true } + end + end + M.attach_module(mod, bufnr, lang) end @@ -101,19 +115,28 @@ local function enable_all(mod) return end + enable_mod_conf_autocmd(mod) + config_mod.enable = true + config_mod.enabled_buffers = nil + for _, bufnr in pairs(api.nvim_list_bufs()) do enable_module(mod, bufnr) end - - enable_mod_conf_autocmd(mod) - config_mod.enable = true end -- Disables and detaches the module for a buffer. -- @param mod path to module -- @param bufnr buffer number, defaults to current buffer local function disable_module(mod, bufnr) + local module = M.get_module(mod) + if not module then + return + end + bufnr = bufnr or api.nvim_get_current_buf() + if module.enabled_buffers then + module.enabled_buffers[bufnr] = false + end M.detach_module(mod, bufnr) end @@ -136,16 +159,17 @@ end -- @param mod path to module local function disable_all(mod) local config_mod = M.get_module(mod) - if not config_mod or not config_mod.enable then + if not config_mod then return end + config_mod.enabled_buffers = nil + disable_mod_conf_autocmd(mod) + config_mod.enable = false + for _, bufnr in pairs(api.nvim_list_bufs()) do disable_module(mod, bufnr) end - - disable_mod_conf_autocmd(mod) - config_mod.enable = false end -- Toggles a module for a buffer @@ -291,21 +315,21 @@ M.commands = { "-complete=custom,nvim_treesitter#available_modules", }, }, - TSEnableAll = { + TSEnable = { run = enable_all, args = { "-nargs=+", "-complete=custom,nvim_treesitter#available_modules", }, }, - TSDisableAll = { + TSDisable = { run = disable_all, args = { "-nargs=+", "-complete=custom,nvim_treesitter#available_modules", }, }, - TSToggleAll = { + TSToggle = { run = toggle_all, args = { "-nargs=+", @@ -347,7 +371,9 @@ function M.is_enabled(mod, lang, bufnr) return false end - if not module_config.enable or not module_config.is_supported(lang) then + local buffer_enabled = module_config.enabled_buffers and module_config.enabled_buffers[bufnr] + local config_enabled = module_config.enable or buffer_enabled + if not config_enabled or not module_config.is_supported(lang) then return false end |
