Add condition function to module config

The function is called with the language and bufnr, if it returns false,
the module is disabled for that buffer.

This gives the user more fine-grained control over whether a module is
started.
This commit is contained in:
patrick96 2021-11-09 18:24:35 +01:00 committed by Stephan Seitz
parent 6888242b98
commit e3dabec462
2 changed files with 12 additions and 6 deletions

View file

@ -335,8 +335,9 @@ M.commands = {
} }
-- @param mod: module (string) -- @param mod: module (string)
-- @param ft: filetype (string) -- @param lang: the language of the buffer (string)
function M.is_enabled(mod, lang) -- @param bufnr: the bufnr (number)
function M.is_enabled(mod, lang, bufnr)
if not parsers.list[lang] or not parsers.has_parser(lang) then if not parsers.list[lang] or not parsers.has_parser(lang) then
return false return false
end end
@ -350,6 +351,10 @@ function M.is_enabled(mod, lang)
return false return false
end end
if module_config.cond and not module_config.cond(lang, bufnr) then
return false
end
for _, parser in pairs(module_config.disable) do for _, parser in pairs(module_config.disable) do
if lang == parser then if lang == parser then
return false return false
@ -445,7 +450,7 @@ function M.attach_module(mod_name, bufnr, lang)
local lang = lang or parsers.get_buf_lang(bufnr) local lang = lang or parsers.get_buf_lang(bufnr)
local resolved_mod = resolve_module(mod_name) local resolved_mod = resolve_module(mod_name)
if resolved_mod and not attached_buffers_by_module.has(mod_name, bufnr) and M.is_enabled(mod_name, lang) then if resolved_mod and not attached_buffers_by_module.has(mod_name, bufnr) and M.is_enabled(mod_name, lang, bufnr) then
attached_buffers_by_module.set(mod_name, bufnr, true) attached_buffers_by_module.set(mod_name, bufnr, true)
resolved_mod.attach(bufnr, lang) resolved_mod.attach(bufnr, lang)
end end

View file

@ -58,7 +58,7 @@ local function longest_string_length(list)
return length return length
end end
local function append_module_table(curbuf, parserlist, namespace, modulelist) local function append_module_table(curbuf, origbuf, parserlist, namespace, modulelist)
local maxlen_parser = longest_string_length(parserlist) local maxlen_parser = longest_string_length(parserlist)
table.sort(modulelist) table.sort(modulelist)
@ -77,7 +77,7 @@ local function append_module_table(curbuf, parserlist, namespace, modulelist)
for _, module in pairs(modulelist) do for _, module in pairs(modulelist) do
local modlen = #module local modlen = #module
module = namespace_prefix .. module module = namespace_prefix .. module
if configs.is_enabled(module, parser) then if configs.is_enabled(module, parser, origbuf) then
line = line .. "" line = line .. ""
else else
line = line .. "" line = line .. ""
@ -91,6 +91,7 @@ local function append_module_table(curbuf, parserlist, namespace, modulelist)
end end
local function print_info_modules(parserlist, module) local function print_info_modules(parserlist, module)
local origbuf = api.nvim_get_current_buf()
api.nvim_command "enew" api.nvim_command "enew"
local curbuf = api.nvim_get_current_buf() local curbuf = api.nvim_get_current_buf()
@ -109,7 +110,7 @@ local function print_info_modules(parserlist, module)
table.sort(parserlist) table.sort(parserlist)
for _, namespace in ipairs(namespaces) do for _, namespace in ipairs(namespaces) do
append_module_table(curbuf, parserlist, namespace, modules[namespace]) append_module_table(curbuf, origbuf, parserlist, namespace, modules[namespace])
end end
api.nvim_buf_set_option(curbuf, "modified", false) api.nvim_buf_set_option(curbuf, "modified", false)