return function(client, bufnr) if client.server_capabilities.documentSymbolProvider then require('nvim-navbuddy').attach(client, bufnr) end if client.server_capabilities.inlayHintProvider ~= nil and client.server_capabilities.inlayHintProvider.resolveProvider then vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) end local nmap = function(keys, func, desc) if desc then desc = 'LSP: ' .. desc end vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) end nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') nmap('gi', vim.lsp.buf.implementation, '[G]oto [I]mplementation') nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') nmap('rn', vim.lsp.buf.rename, '[R]e[N]ame') nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') nmap('K', vim.lsp.buf.hover, 'Hover docs') -- Lesser used LSP functionality nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') nmap('wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, '[W]orkspace [L]ist Folders') nmap('e', vim.diagnostic.open_float, 'Open floating diagnostics') nmap('q', vim.diagnostic.setloclist, 'Open diagnostics list') end