|
@@ -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)
|