diff --git a/lua/doom/modules/features/linter/init.lua b/lua/doom/modules/features/linter/init.lua index 89d07b9c..5829f052 100644 --- a/lua/doom/modules/features/linter/init.lua +++ b/lua/doom/modules/features/linter/init.lua @@ -1,5 +1,18 @@ local linter = {} +linter.utils = { + format_buffer = function() + local null_ls_settings = doom.features.linter.settings.null_ls_settings + if type(vim.lsp.buf.format) == "function" then + vim.lsp.buf.format({ + timeout_ms = null_ls_settings.default_timeout, + }) + else + vim.lsp.buf.formatting_sync(nil, null_ls_settings.default_timeout) + end + end, +} + linter.settings = { format_on_save = false, null_ls_settings = { @@ -24,16 +37,14 @@ linter.configs["null-ls.nvim"] = function() local null_ls_settings = doom.features.linter.settings.null_ls_settings null_ls.setup(vim.tbl_deep_extend("force", null_ls_settings, { on_attach = function(client) - if - client.server_capabilities.documentFormattingProvider - and doom.features.linter.settings.format_on_save + if client.server_capabilities.documentFormattingProvider + and doom.features.linter.settings.format_on_save then - vim.cmd([[ - augroup LspFormatting - autocmd! * - autocmd BufWritePre lua type(vim.lsp.buf.format) == "function" and vim.lsp.buf.format() or vim.lsp.buf.formatting_sync() - augroup END - ]]) + local lsp_formatting_group = vim.api.nvim_create_augroup("LspFormatting", { clear = true }) + vim.api.nvim_create_autocmd({ "BufWritePre" }, { + group = lsp_formatting_group, + callback = doom.features.linter.utils.format_buffer, + }) end end, })) @@ -42,16 +53,7 @@ end linter.binds = { { "cf", - function() - local null_ls_settings = doom.features.linter.settings.null_ls_settings - if type(vim.lsp.buf.format) == "function" then - vim.lsp.buf.format({ - timeout_ms = null_ls_settings.default_timeout, - }) - else - vim.lsp.buf.formatting_sync(nil, null_ls_settings.default_timeout) - end - end, + linter.utils.format_buffer, name = "Format/Fix", }, }