diff --git a/templates/nvim/lua/lsp.lua.j2 b/templates/nvim/lua/lsp.lua.j2 index b76afc8..815f14a 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") +local enable_formatting = os.getenv("enable_formatting") == 'true'; -- format buffers before saving for specific LSPs if (enable_formatting) then @@ -185,38 +185,21 @@ if (enable_formatting) then vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('lsp', { clear = true }), callback = function(args) - 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 client = vim.lsp.get_client_by_id(args.data.client_id) - local filtered_clients = {} + if vim.list_contains(excluded_clients, client.name) then return end; - 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) - return vim.list_contains(filtered_clients, client.name) - end, - async = false, - id = args.data.client_id - } - end, - }) + if client.server_capabilities.documentFormattingProvider then + vim.api.nvim_create_autocmd('BufWritePre', { + buffer = args.buf, + callback = function() + vim.lsp.buf.format { + async = false, + id = args.data.client_id + } + end, + }) + end end }) end