---@diagnostic disable: param-type-mismatch local misc = require("core.misc") local map, auto = misc.map, misc.auto local popup_opts, hover_opts, signature_opts, list_opts, location_opts -- TODO: find a way to make the qflist current item be the one closest to the -- cursor whenever we open it local function on_list(opts) vim.fn.setqflist({}, "r", opts) if #opts.items > 1 then vim.cmd.copen() end vim.cmd(".cc! 1") end -- disable the default keybinds (they're bad) for _, bind in ipairs({ "grn", "gra", "gri", "grr" }) do pcall(vim.keymap.del, "n", bind) end local M = {} --- setup vim lsp options function M.setup() -- options for different lsp functions popup_opts = { border = vim.g.border_style } hover_opts = vim.tbl_deep_extend("force", popup_opts, {}) signature_opts = vim.tbl_deep_extend("force", popup_opts, {}) list_opts = { on_list = on_list } location_opts = vim.tbl_deep_extend("force", list_opts, {}) -- confgiure lsp vim.diagnostic.config { virtual_text = false, virtual_lines = { current_line = true }, update_in_insert = false, underline = true, severity_sort = true, signs = { text = { [vim.diagnostic.severity.ERROR] = "x", [vim.diagnostic.severity.WARN] = "!", [vim.diagnostic.severity.INFO] = "i", [vim.diagnostic.severity.HINT] = "h" } } } -- set default capabilities and attach function vim.lsp.config['*'] = { capabilities = vim.lsp.protocol.make_client_capabilities() } -- make my attach function always run auto("LspAttach", { callback = function(event) local opts = { buffer = event.buf, nowait = true } -- LSP actions map("n", "K", function() vim.lsp.buf.hover(hover_opts) end, opts) map("n", "gd", function() vim.lsp.buf.definition(location_opts) end, opts) map("n", "gD", function() vim.lsp.buf.declaration(location_opts) end, opts) map("n", "gi", function() vim.lsp.buf.implementation(location_opts) end, opts) map("n", "gy", function() vim.lsp.buf.type_definition(location_opts) end, opts) map("n", "gr", function() vim.lsp.buf.references(nil, list_opts) end, opts) map("n", "", function() vim.lsp.buf.signature_help(signature_opts) end, opts) map("n", { "r", "" }, vim.lsp.buf.rename, opts) map("n", { "gA", "" }, vim.lsp.buf.code_action, opts) -- Diagnostics map("n", "[d", function() vim.diagnostic.jump({ count = -1 }) end, opts) map("n", "]d", function() vim.diagnostic.jump({ count = 1 }) end, opts) end }) end return M