summaryrefslogtreecommitdiff
path: root/lua/lsp/utils.lua
diff options
context:
space:
mode:
authorkylo252 <[email protected]>2021-10-03 16:13:46 +0200
committerGitHub <[email protected]>2021-10-03 16:13:46 +0200
commitd01ba08eaec1640ac2d038893525b3ba0af25813 (patch)
tree5edf2f5a12cedacb32f0c5d45ec2d999dacb99cd /lua/lsp/utils.lua
parent3e1cd1ec235404ae96ed2d0756729cf44ae48f3e (diff)
refactor: auto-generate language configuration (#1584)
Refactor the monolithic `lvim.lang` design into a more modular approach. IMPORTANT: run `:LvimUpdate` in order to generate the new ftplugin template files.
Diffstat (limited to 'lua/lsp/utils.lua')
-rw-r--r--lua/lsp/utils.lua57
1 files changed, 49 insertions, 8 deletions
diff --git a/lua/lsp/utils.lua b/lua/lsp/utils.lua
index 17b9c3bc..1a5dd79d 100644
--- a/lua/lsp/utils.lua
+++ b/lua/lsp/utils.lua
@@ -10,19 +10,60 @@ function M.is_client_active(name)
return false
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
- end
+function M.disable_formatting_capability(client)
+ -- FIXME: figure out a reasonable way to do this
+ client.resolved_capabilities.document_formatting = false
+ require("core.log"):debug(string.format("Turning off formatting capability for language server [%s] ", client.name))
+end
+function M.get_active_client_by_ft(filetype)
+ local matches = {}
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 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_ls_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
- return nil
end
return M