diff options
| author | kylo252 <[email protected]> | 2022-07-31 14:28:43 +0200 | 
|---|---|---|
| committer | kylo252 <[email protected]> | 2022-07-31 14:28:43 +0200 | 
| commit | 6fbefdacd35f03b8146490613c54e7865d06a77f (patch) | |
| tree | 70e378c86c411b4c959e7f04851263fc96ad752e /lua/lvim/lsp/utils.lua | |
| parent | b04aefbb79670b115f4f363906d6d294b3d0a2a3 (diff) | |
| parent | dec21bbab6cf9102e236806e20273d08f32f8716 (diff) | |
Merge branch 'rolling'
Diffstat (limited to 'lua/lvim/lsp/utils.lua')
| -rw-r--r-- | lua/lvim/lsp/utils.lua | 53 | 
1 files changed, 27 insertions, 26 deletions
| diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua index d0e36241..fa1ac6d9 100644 --- a/lua/lvim/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -130,45 +130,46 @@ 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 ----@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) +---always selects null-ls if it's available and caches the value per buffer +---@param client table client attached to a buffer +---@return boolean if client matches +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_formatters = s.get_available(filetype, method) + +  if #avalable_formatters > 0 then +    return client.name == "null-ls" +  elseif client.supports_method "textDocument/formatting" then +    return true +  else +    return false +  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) + +  ---@type table|nil +  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) | 
