summaryrefslogtreecommitdiff
path: root/lua/lsp/utils.lua
diff options
context:
space:
mode:
authorkylo252 <[email protected]>2021-10-09 22:17:30 +0200
committerkylo252 <[email protected]>2021-10-09 22:17:30 +0200
commitcaf62bcfed4fc6cfed26164e39d22a568d21f9d0 (patch)
tree47f7ddcbe7ef10b6cffd8398dbfc215d94fc2fae /lua/lsp/utils.lua
parent4126e5765d69840660fab2a05bbc664ad0117b95 (diff)
parent82b7a35858479223c1e34bea2f64451ecf1e5f66 (diff)
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lsp/utils.lua')
-rw-r--r--lua/lsp/utils.lua58
1 files changed, 46 insertions, 12 deletions
diff --git a/lua/lsp/utils.lua b/lua/lsp/utils.lua
index 17b9c3bc..59003406 100644
--- a/lua/lsp/utils.lua
+++ b/lua/lsp/utils.lua
@@ -1,28 +1,62 @@
local M = {}
+local tbl = require "utils.table"
+
function M.is_client_active(name)
local clients = vim.lsp.get_active_clients()
+ return tbl.find_first(clients, function(client)
+ return client.name == name
+ end)
+end
+
+function M.get_active_clients_by_ft(filetype)
+ local matches = {}
+ local clients = vim.lsp.get_active_clients()
for _, client in pairs(clients) do
- if client.name == name then
- return true, client
+ local supported_filetypes = client.config.filetypes or {}
+ if client.name ~= "null-ls" and vim.tbl_contains(supported_filetypes, filetype) then
+ table.insert(matches, client)
end
end
- return false
+ return matches
end
--- FIXME: this should return a list instead
-function M.get_active_client_by_ft(filetype)
- if not lvim.lang[filetype] or not lvim.lang[filetype].lsp then
- return nil
+function M.get_client_capabilities(client_id)
+ if not client_id then
+ local buf_clients = vim.lsp.buf_get_clients()
+ for _, buf_client in ipairs(buf_clients) do
+ if buf_client.name ~= "null-ls" then
+ client_id = buf_client.id
+ break
+ end
+ end
+ end
+ if not client_id then
+ error "Unable to determine client_id"
+ return
end
- local clients = vim.lsp.get_active_clients()
- for _, client in pairs(clients) do
- if client.name == lvim.lang[filetype].lsp.provider then
- return client
+ local client = vim.lsp.get_client_by_id(tonumber(client_id))
+
+ local enabled_caps = {}
+ for capability, status in pairs(client.resolved_capabilities) do
+ if status == true then
+ table.insert(enabled_caps, capability)
+ end
+ end
+
+ return enabled_caps
+end
+
+function M.get_supported_filetypes(server_name)
+ -- print("got filetypes query request for: " .. server_name)
+ local configs = require "lspconfig/configs"
+ pcall(require, ("lspconfig/" .. server_name))
+ for _, config in pairs(configs) do
+ if config.name == server_name then
+ return config.document_config.default_config.filetypes or {}
end
end
- return nil
end
return M