local lsp = require("lsp-zero") lsp.preset("recommended") lsp.ensure_installed { "rust_analyzer" } lsp.nvim_workspace() local cmp = require("cmp") local cmp_select = { behavior = cmp.SelectBehavior.Select } local cmp_mapping = lsp.defaults.cmp_mappings({ [""] = cmp.mapping.select_prev_item(cmp_select), [""] = cmp.mapping.select_next_item(cmp_select), [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }) lsp.setup_nvim_cmp({ mapping = cmp_mapping }) vim.diagnostic.config({ virtual_text = false, }) -- Gimme pretty icons lsp.set_sign_icons({ error = '✘', warn = '▲', hint = '⚑', info = '»' }) lsp.on_attach(function(_, buffnr) local opts = { buffer = buffnr, remap = false } vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) vim.keymap.set("n", "re", vim.lsp.buf.rename, opts) vim.keymap.set({"n", "i"}, "", vim.lsp.buf.signature_help, opts) vim.keymap.set("n", "fmt", function() vim.lsp.buf.format({ async = false, timeout_ms = 5000 }) end) end) -- NOTE: Format on save does not support async formatting lsp.format_on_save({ servers = { ["rust_analyzer"] = {"rust"} } }) lsp.setup() require("lsp-inlayhints").setup()