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) local client if not client_id then local buf_clients = vim.lsp.buf_get_clients() for _, buf_client in pairs(buf_clients) do if buf_client.name ~= "null-ls" then client = buf_client break end end else client = vim.lsp.get_client_by_id(tonumber(client_id)) end if not client then error "Unable to determine client_id" return end 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 ---Get supported filetypes per server ---@param server_name string can be any server supported by nvim-lsp-installer ---@return table supported filestypes as a list of strings function M.get_supported_filetypes(server_name) local status_ok, lsp_installer_servers = pcall(require, "nvim-lsp-installer.servers") if not status_ok then return {} end local server_available, requested_server = lsp_installer_servers.get_server(server_name) if not server_available then return {} end return requested_server:get_supported_filetypes() end ---Get all supported filetypes by nvim-lsp-installer ---@return table supported filestypes as a list of strings function M.get_all_supported_filetypes() local status_ok, lsp_installer_filetypes = pcall(require, "nvim-lsp-installer._generated.filetype_map") if not status_ok then return {} end return vim.tbl_keys(lsp_installer_filetypes or {}) end function M.conditional_document_highlight(id) local client_ok, method_supported = pcall(function() return vim.lsp.get_client_by_id(id).resolved_capabilities.document_highlight end) if not client_ok or not method_supported then return end vim.lsp.buf.document_highlight() end return M