X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/b99dee25318e48024313b76e075a24afccd0c10b..61c72f133658b6fc6a60953ca34a8ea3f88c10fc:/nvim/lua/rmz/util/lsp.lua diff --git a/nvim/lua/rmz/util/lsp.lua b/nvim/lua/rmz/util/lsp.lua index 7424803..70bcc2f 100644 --- a/nvim/lua/rmz/util/lsp.lua +++ b/nvim/lua/rmz/util/lsp.lua @@ -73,9 +73,6 @@ function M.on_attach(on_attach, name) }) end ----@type table>> -M._supports_method = {} - function M.setup() local register_capability = vim.lsp.handlers["client/registerCapability"] vim.lsp.handlers["client/registerCapability"] = function(err, res, ctx) @@ -92,36 +89,6 @@ function M.setup() end return ret end - M.on_attach(M._check_methods) - M.on_dynamic_capability(M._check_methods) -end - ----@param client vim.lsp.Client -function M._check_methods(client, buffer) - -- don't trigger on invalid buffers - if not vim.api.nvim_buf_is_valid(buffer) then - return - end - -- don't trigger on non-listed buffers - if not vim.bo[buffer].buflisted then - return - end - -- don't trigger on nofile buffers - if vim.bo[buffer].buftype == "nofile" then - return - end - for method, clients in pairs(M._supports_method) do - clients[client] = clients[client] or {} - if not clients[client][buffer] then - if client.supports_method and client.supports_method(method, { bufnr = buffer }) then - clients[client][buffer] = true - vim.api.nvim_exec_autocmds("User", { - pattern = "LspSupportsMethod", - data = { client_id = client.id, buffer = buffer, method = method }, - }) - end - end - end end ---@param fn fun(client:vim.lsp.Client, buffer):boolean? @@ -140,107 +107,6 @@ function M.on_dynamic_capability(fn, opts) }) end ----@param method string ----@param fn fun(client:vim.lsp.Client, buffer) -function M.on_supports_method(method, fn) - M._supports_method[method] = M._supports_method[method] or setmetatable({}, { __mode = "k" }) - return vim.api.nvim_create_autocmd("User", { - pattern = "LspSupportsMethod", - callback = function(args) - local client = vim.lsp.get_client_by_id(args.data.client_id) - local buffer = args.data.buffer ---@type number - if client and method == args.data.method then - return fn(client, buffer) - end - end, - }) -end - ----@return _.lspconfig.options -function M.get_config(server) - local configs = require("lspconfig.configs") - return rawget(configs, server) -end - ----@return {default_config:lspconfig.Config} -function M.get_raw_config(server) - local ok, ret = pcall(require, "lspconfig.configs." .. server) - if ok then - return ret - end - return require("lspconfig.server_configurations." .. server) -end - -function M.is_enabled(server) - local c = M.get_config(server) - return c and c.enabled ~= false -end - ----@param server string ----@param cond fun( root_dir, config): boolean -function M.disable(server, cond) - local util = require("lspconfig.util") - local def = M.get_config(server) - ---@diagnostic disable-next-line: undefined-field - def.document_config.on_new_config = util.add_hook_before(def.document_config.on_new_config, function(config, root_dir) - if cond(root_dir, config) then - config.enabled = false - end - end) -end - ----@param opts? LazyFormatter| {filter?: (string|lsp.Client.filter)} -function M.formatter(opts) - opts = opts or {} - local filter = opts.filter or {} - filter = type(filter) == "string" and { name = filter } or filter - ---@cast filter lsp.Client.filter - ---@type LazyFormatter - local ret = { - name = "LSP", - primary = true, - priority = 1, - format = function(buf) - M.format(LazyVim.merge({}, filter, { bufnr = buf })) - end, - sources = function(buf) - local clients = M.get_clients(LazyVim.merge({}, filter, { bufnr = buf })) - ---@param client vim.lsp.Client - local ret = vim.tbl_filter(function(client) - return client.supports_method("textDocument/formatting") - or client.supports_method("textDocument/rangeFormatting") - end, clients) - ---@param client vim.lsp.Client - return vim.tbl_map(function(client) - return client.name - end, ret) - end, - } - return LazyVim.merge(ret, opts) --[[@as LazyFormatter]] -end - ----@alias lsp.Client.format {timeout_ms?: number, format_options?: table} | lsp.Client.filter - ----@param opts? lsp.Client.format -function M.format(opts) - opts = vim.tbl_deep_extend( - "force", - {}, - opts or {}, - LazyVim.opts("nvim-lspconfig").format or {}, - LazyVim.opts("conform.nvim").format or {} - ) - local ok, conform = pcall(require, "conform") - -- use conform for formatting with LSP when available, - -- since it has better format diffing - if ok then - opts.formatters = {} - conform.format(opts) - else - vim.lsp.buf.format(opts) - end -end - M.action = setmetatable({}, { __index = function(_, action) return function()