local config = require("copilot.config") local util = require("copilot.util") local logger = require("copilot.logger") local status = require("copilot.status") local panel = require("copilot.panel") local M = {} function M.get_handlers() local handlers = { -- TODO: I don't like the handlers.handlers PanelSolution = panel.handlers.handlers.PanelSolution, PanelSolutionsDone = panel.handlers.handlers.PanelSolutionsDone, statusNotification = status.handlers.statusNotification, ["window/showDocument"] = util.show_document, } -- optional handlers local logger_conf = config.logger if logger_conf.trace_lsp ~= "off" then handlers = vim.tbl_extend("force", handlers, { ["$/logTrace"] = logger.handle_lsp_trace, }) end if logger_conf.trace_lsp_progress then handlers = vim.tbl_extend("force", handlers, { ["$/progress"] = logger.handle_lsp_progress, }) end if logger_conf.log_lsp_messages then handlers = vim.tbl_extend("force", handlers, { ["window/logMessage"] = logger.handle_log_lsp_messages, }) end if config.disable_limit_reached_message then handlers["window/showMessageRequest"] = (function(overridden) return function(err, params, ctx) if params.message:match([[^You've reached.*limit.*Upgrade.*$]]) then -- ignore logger.trace("API limited:", params.message) return vim.NIL end return overridden(err, params, ctx) end end)(vim.lsp.handlers["window/showMessageRequest"]) end return handlers end return M