local lspconf = { { pattern = {"*.rs"}, options = { name = 'rust-analyzer', cmd = {'rustup', 'run', 'stable', 'rust-analyzer'}, root_dir = vim.fs.dirname(vim.fs.find({'Cargo.toml'}, { upward = true })[1]), }, format = true, } } for _, config in pairs(lspconf) do vim.api.nvim_create_autocmd("BufEnter", { pattern = config.pattern, callback = function() local client = vim.lsp.start(config.options) vim.lsp.buf_attach_client(0, client) end }) if config.format then vim.api.nvim_create_autocmd("BufWritePre", { pattern = config.pattern, callback = function() vim.lsp.buf.format({ async = false }) end }) end end vim.api.nvim_create_autocmd('LspAttach', { callback = function(args) vim.keymap.set('n', 'ld', vim.lsp.buf.definition) vim.keymap.set('n', 'lr', vim.lsp.buf.references) vim.keymap.set('n', 'li', vim.lsp.buf.implementation) vim.keymap.set('n', 'lh', vim.lsp.buf.hover) vim.keymap.set('n', 'ls', vim.lsp.buf.signature_help) vim.keymap.set('n', 'lrn', vim.lsp.buf.rename) end, }) vim.opt.completeopt = {"menu"}