summaryrefslogtreecommitdiff
path: root/lua/lvim/lsp/utils.lua
diff options
context:
space:
mode:
authorkylo252 <[email protected]>2021-10-21 07:48:10 +0200
committerkylo252 <[email protected]>2021-10-21 07:48:10 +0200
commit30de3736baec9a72134205de91f3388e3ea68bcf (patch)
treec0079f51d68c61316726f104bae963c5f0371571 /lua/lvim/lsp/utils.lua
parentb98264042f558751483e2c993ebed11a5bcbb1de (diff)
parent25747cfff457d5375b6141588d81017ca515ffcb (diff)
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lvim/lsp/utils.lua')
-rw-r--r--lua/lvim/lsp/utils.lua62
1 files changed, 62 insertions, 0 deletions
diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua
new file mode 100644
index 00000000..a34fbf44
--- /dev/null
+++ b/lua/lvim/lsp/utils.lua
@@ -0,0 +1,62 @@
+local M = {}
+
+local tbl = require "lvim.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
+ 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 matches
+end
+
+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 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
+end
+
+return M