From f7eb8dc56d272e28378acd73f68133a0e66da88f Mon Sep 17 00:00:00 2001 From: Sonny Bakker Date: Sat, 22 Feb 2025 20:37:35 +0100 Subject: [PATCH] Apply lsp client filtering before filter callback --- templates/nvim/lua/lsp.lua.j2 | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/templates/nvim/lua/lsp.lua.j2 b/templates/nvim/lua/lsp.lua.j2 index 0f8e4d5..b76afc8 100644 --- a/templates/nvim/lua/lsp.lua.j2 +++ b/templates/nvim/lua/lsp.lua.j2 @@ -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 if (enable_formatting) then @@ -188,10 +188,29 @@ if (enable_formatting) then vim.api.nvim_create_autocmd('BufWritePre', { buffer = args.buf, 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 { filter = function(client) - if not client.supports_method('textDocument/formatting') then return end - return not vim.list_contains(excluded_clients, client.name) + return vim.list_contains(filtered_clients, client.name) end, async = false, id = args.data.client_id