diff options
Diffstat (limited to 'lua/lvim/lsp/utils.lua')
| -rw-r--r-- | lua/lvim/lsp/utils.lua | 48 | 
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) | 
