Apply lsp client filtering before filter callback

This commit is contained in:
Sonny Bakker 2025-02-22 20:37:35 +01:00
parent 0f0a5e592b
commit f7eb8dc56d

View file

@ -176,7 +176,7 @@ vim.diagnostic.config {
}, },
} }
local enable_formatting = os.getenv("ENABLE_FORMATTING", False) local enable_formatting = os.getenv("ENABLE_FORMATTING")
-- format buffers before saving for specific LSPs -- format buffers before saving for specific LSPs
if (enable_formatting) then if (enable_formatting) then
@ -188,10 +188,29 @@ if (enable_formatting) then
vim.api.nvim_create_autocmd('BufWritePre', { vim.api.nvim_create_autocmd('BufWritePre', {
buffer = args.buf, buffer = args.buf,
callback = function() callback = function()
local formatting_clients = vim.lsp.get_clients {
bufnr = args.buf,
method = 'textDocument/formatting'
}
local filtered_clients = {}
for _, client in pairs(formatting_clients) do
if vim.list_contains(excluded_clients, client.name) then
goto skip
end
table.insert(filtered_clients, client.name)
::skip::
end
if #filtered_clients == 0 then
return
end
vim.lsp.buf.format { vim.lsp.buf.format {
filter = function(client) filter = function(client)
if not client.supports_method('textDocument/formatting') then return end return vim.list_contains(filtered_clients, client.name)
return not vim.list_contains(excluded_clients, client.name)
end, end,
async = false, async = false,
id = args.data.client_id id = args.data.client_id