diff --git a/lua/custom/plugins/format.lua b/lua/custom/plugins/format.lua new file mode 100644 index 00000000..8de50d4b --- /dev/null +++ b/lua/custom/plugins/format.lua @@ -0,0 +1,41 @@ + +local M = {} + +M.autoformat = true + +function M.toggle() + M.autoformat = not M.autoformat + vim.notify(M.autoformat and "Enabled format on save" or "Disabled format on save") +end + +function M.format() + local buf = vim.api.nvim_get_current_buf() + local ft = vim.bo[buf].filetype + local have_nls = #require("null-ls.sources").get_available(ft, "NULL_LS_FORMATTING") > 0 + + vim.lsp.buf.format { + bufnr = buf, + filter = function(client) + if have_nls then + return client.name == "null-ls" + end + return client.name ~= "null-ls" + end, + } +end + +function M.on_attach(client, buf) + if client.supports_method "textDocument/formatting" then + vim.api.nvim_create_autocmd("BufWritePre", { + group = vim.api.nvim_create_augroup("LspFormat." .. buf, {}), + buffer = buf, + callback = function() + if M.autoformat then + M.format() + end + end, + }) + end +end + +return M