diff --git a/lua/lazyvim/plugins/lsp/format.lua b/lua/lazyvim/plugins/lsp/format.lua index b30dcff7..7fca9d31 100644 --- a/lua/lazyvim/plugins/lsp/format.lua +++ b/lua/lazyvim/plugins/lsp/format.lua @@ -18,7 +18,7 @@ function M.format() local ft = vim.bo[buf].filetype local have_nls = #require("null-ls.sources").get_available(ft, "NULL_LS_FORMATTING") > 0 - vim.lsp.buf.format({ + vim.lsp.buf.format(vim.tbl_deep_extend("force", { bufnr = buf, filter = function(client) if have_nls then @@ -26,7 +26,7 @@ function M.format() end return client.name ~= "null-ls" end, - }) + }, require("lazyvim.util").opts("nvim-lspconfig").format or {})) end function M.on_attach(client, buf) diff --git a/lua/lazyvim/plugins/lsp/init.lua b/lua/lazyvim/plugins/lsp/init.lua index 205acc34..9eea8244 100644 --- a/lua/lazyvim/plugins/lsp/init.lua +++ b/lua/lazyvim/plugins/lsp/init.lua @@ -12,12 +12,20 @@ return { }, ---@class PluginLspOpts opts = { + -- options for vim.diagnostic.config() diagnostics = { underline = true, update_in_insert = false, virtual_text = { spacing = 4, prefix = "●" }, severity_sort = true, }, + -- options for vim.lsp.buf.format + -- `bufnr` and `filter` is handled by the LazyVim formatter, + -- but can be also overriden when specified + format = { + formatting_options = nil, + timeout = nil, + }, ---@type lspconfig.options servers = { jsonls = {}, diff --git a/lua/lazyvim/util/init.lua b/lua/lazyvim/util/init.lua index cc02144b..83fdf6ec 100644 --- a/lua/lazyvim/util/init.lua +++ b/lua/lazyvim/util/init.lua @@ -20,6 +20,16 @@ function M.has(plugin) return require("lazy.core.config").plugins[plugin] ~= nil end +---@param name string +function M.opts(name) + local plugin = require("lazy.core.config").plugins[name] + if not plugin then + return {} + end + local Plugin = require("lazy.core.plugin") + return Plugin.values(plugin, "opts", false) +end + -- returns the root directory based on: -- * lsp workspace folders -- * lsp root_dir