local M = {} function M.on_attach(client, bufnr) local function set_nnoremap(key, func) vim.keymap.set('n', key, func, { buffer = bufnr }) end set_nnoremap('[d', vim.diagnostic.goto_prev) set_nnoremap(']d', vim.diagnostic.goto_next) set_nnoremap('g"', vim.lsp.buf.code_action) set_nnoremap('g?', vim.diagnostic.open_float) set_nnoremap('gq', function() vim.lsp.buf.format { async = true } end) set_nnoremap('gr', vim.lsp.buf.rename) end M.capabilities = require('cmp_nvim_lsp').default_capabilities() function M.setup(client) -- Return a nested function so that we can continue invoking `setup` in the -- familiar way. return function(opts) opts.on_attach = opts.on_attach or M.on_attach opts.cabailities = opts.cabailities or M.capabilities client.setup(opts) end end return M