local opts = {} local on_attach = function() local function set_keymap(...) vim.api.nvim_set_keymap(...) end local function set_option(...) vim.api.nvim_set_option(...) end -- Enable completion triggered by set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. local function optsWithDesc(desc) return { silent = true, desc = desc } end --setup leader-l prefix in whitch-key local wk = require("which-key") wk.register { ["l"]={ name="+lsp" } } -- See `:help vim.lsp.*` for documentation on any of the below functions set_keymap('', 'lc', 'lua vim.lsp.buf.declaration()', optsWithDesc("jump to declaration")) set_keymap('', 'ld', 'lua vim.lsp.buf.definition()', optsWithDesc("jump to definition")) set_keymap('', 'lh', 'lua vim.lsp.buf.hover()', optsWithDesc("show lsp hover info")) set_keymap('', 'li', 'lua vim.lsp.buf.implementation()', optsWithDesc("show implementations")) set_keymap('', 'ls', 'lua vim.lsp.buf.signature_help()', optsWithDesc("show signature help")) set_keymap('', 'lwa', 'lua vim.lsp.buf.add_workspace_folder()', optsWithDesc("add workspace folder")) set_keymap('', 'lwr', 'lua vim.lsp.buf.remove_workspace_folder()', optsWithDesc("remove workspace folder")) set_keymap('', 'lw', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', optsWithDesc("show workspace folders")) set_keymap('', 'lr', 'lua vim.lsp.buf.rename()', optsWithDesc("rename symbol")) set_keymap('', 'la', 'lua vim.lsp.buf.code_action()', optsWithDesc("lsp code action")) set_keymap('', 'le', 'lua vim.lsp.buf.references()', optsWithDesc("list references")) set_keymap('', 'lo', 'lua vim.diagnostic.open_float()', optsWithDesc("show diagnostic in floating window")) set_keymap('', 'ln', 'lua vim.diagnostic.goto_next()', optsWithDesc("next lsp diagnostic")) set_keymap('', 'lp', 'lua vim.diagnostic.goto_prev()', optsWithDesc("prev lsp diagnostic")) set_keymap('', 'lm', 'lua vim.lsp.buf.format {async=true}', optsWithDesc("format buffer")) set_keymap('', ']d', 'lua vim.diagnostic.goto_next()', optsWithDesc("next lsp diagnostic")) set_keymap('', '[d', 'lua vim.diagnostic.goto_prev()', optsWithDesc("prev lsp diagnostic")) end require("mason-lspconfig").setup_handlers({ function(server_name) require("lspconfig")[server_name].setup {} on_attach() end, ["rust_analyzer"] = function() require('rust-tools-setup') on_attach() end, ["lua_ls"] = function() require('lspconfig').lua_ls.setup { settings = { Lua = { diagnostics = { globals = { "vim" } } } } } on_attach() end, })