summaryrefslogtreecommitdiff
path: root/lua/lvim
diff options
context:
space:
mode:
authorkylo252 <[email protected]>2022-07-02 09:36:11 +0200
committerGitHub <[email protected]>2022-07-02 09:36:11 +0200
commitefe7eea195e7810069319030dcddc831cdd06ac2 (patch)
treef8104393f51a70b281682300bc893e40caf42f2e /lua/lvim
parent709873702f692a013f059f8f5c5532f0366df35e (diff)
fix(lsp): update format filter for nightly (#2773)
Diffstat (limited to 'lua/lvim')
-rw-r--r--lua/lvim/lsp/utils.lua48
1 files changed, 23 insertions, 25 deletions
diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua
index d0e36241..2a23e501 100644
--- a/lua/lvim/lsp/utils.lua
+++ b/lua/lvim/lsp/utils.lua
@@ -130,45 +130,43 @@ function M.setup_codelens_refresh(client, bufnr)
end
---filter passed to vim.lsp.buf.format
----gives higher priority to null-ls
----@param clients table clients attached to a buffer
+---always selects null-ls if it's available and caches the value per buffer
+---@param client table client attached to a buffer
---@return table chosen clients
-function M.format_filter(clients)
- return vim.tbl_filter(function(client)
- local status_ok, formatting_supported = pcall(function()
- return client.supports_method "textDocument/formatting"
- end)
- -- give higher prio to null-ls
- if status_ok and formatting_supported and client.name == "null-ls" then
- return "null-ls"
- else
- return status_ok and formatting_supported and client.name
- end
- end, clients)
+function M.format_filter(client)
+ local filetype = vim.bo.filetype
+ local n = require "null-ls"
+ local s = require "null-ls.sources"
+ local method = n.methods.FORMATTING
+ local avalable_sources = s.get_available(filetype, method)
+
+ if #avalable_sources > 0 then
+ return client.name == "null-ls"
+ else
+ return true
+ end
end
---Provide vim.lsp.buf.format for nvim <0.8
---@param opts table
function M.format(opts)
- opts = opts or { filter = M.format_filter }
+ opts = opts or {}
+ opts.filter = opts.filter or M.format_filter
if vim.lsp.buf.format then
return vim.lsp.buf.format(opts)
end
local bufnr = opts.bufnr or vim.api.nvim_get_current_buf()
- local clients = vim.lsp.buf_get_clients(bufnr)
+
+ local clients = vim.lsp.get_active_clients {
+ id = opts.id,
+ bufnr = bufnr,
+ name = opts.name,
+ }
if opts.filter then
- clients = opts.filter(clients)
- elseif opts.id then
- clients = vim.tbl_filter(function(client)
- return client.id == opts.id
- end, clients)
- elseif opts.name then
- clients = vim.tbl_filter(function(client)
- return client.name == opts.name
- end, clients)
+ clients = vim.tbl_filter(opts.filter, clients)
end
clients = vim.tbl_filter(function(client)