diff --git a/docs/release-notes/rl-0.4.adoc b/docs/release-notes/rl-0.4.adoc index 6674cc11..2598a9e6 100644 --- a/docs/release-notes/rl-0.4.adoc +++ b/docs/release-notes/rl-0.4.adoc @@ -20,6 +20,12 @@ https://github.com/n3oney[n3oney]: * Refactored the resolveDag function - you can just provide a string now, which will default to dag.entryAnywhere +* Fixed formatting sometimes removing parts of files + +* Made formatting synchronous + +* Gave null-ls priority over other formatters + https://github.com/horriblename[horriblename]: * Added `clangd` as alternative lsp for C/++. diff --git a/modules/lsp/config.nix b/modules/lsp/config.nix index bcd69d49..10851187 100644 --- a/modules/lsp/config.nix +++ b/modules/lsp/config.nix @@ -39,15 +39,43 @@ in { local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) format_callback = function(client, bufnr) - if vim.g.formatsave and client.supports_method("textDocument/formatting") then + if vim.g.formatsave then vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = augroup, buffer = bufnr, callback = function() - vim.lsp.buf.format({ - bufnr = bufnr + ${ + if config.vim.lsp.null-ls.enable + then '' + local function is_null_ls_formatting_enabled(bufnr) + local file_type = vim.api.nvim_buf_get_option(bufnr, "filetype") + local generators = require("null-ls.generators").get_available( + file_type, + require("null-ls.methods").internal.FORMATTING + ) + return #generators > 0 + end + + if is_null_ls_formatting_enabled(bufnr) then + vim.lsp.buf.format({ + bufnr = bufnr, + filter = function(client) + return client.name == "null-ls" + end }) + else + vim.lsp.buf.format({ + bufnr = bufnr, + }) + end + '' + else " + vim.lsp.buf.format({ + bufnr = bufnr, + }) + " + } end, }) end