vim.opt.cot = "menu,menuone,noinsert" vim.opt.pumblend=5 local methods = vim.lsp.protocol.Methods local map = vim.keymap.set local servers = { clangd = {}, zls = {}, rust_analyzer = {} } local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) opts = opts or {} opts.border = opts.border or "rounded" return orig_util_open_floating_preview(contents, syntax, opts, ...) end vim.diagnostic.config({ -- virtual_text = { prefix = "", virt_text_pos = "eol_right_align", }, -- virtual_text = true, float = { border = "rounded" }, signs = false, underline = true, update_in_insert = false, float = true, jump = { float = true }, }) -- is completion visible local function pumvisible() return tonumber(vim.fn.pumvisible()) ~= 0 end vim.api.nvim_create_autocmd("LspAttach", { callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) vim.keymap.set('n', 'grr', function() vim.lsp.buf.references() end, { desc = "Code references (LSP)" }) vim.keymap.set('n', 'gd', function() vim.lsp.buf.definition() end, { desc = "Goto definition (LSP)" }) if client:supports_method(methods.textDocument_completion) then vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = false }) map('i', "", function() return pumvisible() and '' or '' end, { expr = true }) -- TODO: this ignores/overwrites default omnifunc rn map('i', "", function() return pumvisible() and '' or vim.lsp.completion.trigger() end, { expr = true }) map('i', '', function() return pumvisible() and '' or '' end, { expr = true }) end vim.keymap.set('n', 'E', 'lua vim.lsp.buf.hover()', { silent = true }) -- if client:supports_method(methods.textDocument_inlayHint) then -- vim.lsp.inlay_hint.enable() -- end if client:supports_method(methods.textDocument_formatting) then vim.api.nvim_create_autocmd("BufWritePre", { buffer = args.buf, callback = function() vim.lsp.buf.format({bufnr = args.buf, id = client_id}) end }) end end}) local lspconfig = require('lspconfig') for server, config in pairs(servers) do -- config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities) lspconfig[server].setup({}) end