diff --git a/nvim/.config/nvim/lua/lsp.lua b/nvim/.config/nvim/lua/lsp.lua index 1c81823..bfb6886 100644 --- a/nvim/.config/nvim/lua/lsp.lua +++ b/nvim/.config/nvim/lua/lsp.lua @@ -58,6 +58,28 @@ protocol.CompletionItemKind = { ' TypeParameter'; } +local lsp_key_mappings = { + { "definitionProvider" , 'n', 'pd' , 'lua PeekDefinition()' }, + { "definitionProvider" , 'n', 'gd' , 'lua vim.lsp.buf.definition()' }, + { "declarationProvider" , 'n', 'gD' , 'lua vim.lsp.buf.declaration()' }, + { "typeDefinitionProvider" , 'n', '' , 'lua vim.lsp.buf.type_definition()' }, + { "referencesProvider" , 'n', 'gr' , 'lua vim.lsp.buf.references()' }, + { "implementationProvider" , 'n', 'gi' , 'lua vim.lsp.buf.implementation()' }, + { "documentSymbolProvider" , 'n', '1gd' , 'lua vim.lsp.buf.document_symbol()' }, + { "workspaceSymbolProvider", 'n', '1gD' , 'lua vim.lsp.buf.workspace_symbol()' }, + { "hoverProvider" , 'n', 'k', 'lua vim.lsp.buf.hover()' }, + { "signatureHelpProvider" , 'n', 'S', 'lua vim.lsp.buf.signature_help()' }, + { "renameProvider" , 'n', 'gR' , 'lua vim.lsp.buf.rename()' }, + + { "documentRangeFormattingProvider", 'x', 'gq', 'lua FormatRangeOperator()' }, + { "documentFormattingProvider" , 'n', 'gq', 'lua vim.lsp.buf.format({async=true})' }, + + { "codeActionProvider", 'n', 'ga' , 'lua vim.lsp.buf.code_action()' }, + { "codeActionProvider", 'v', 'ga' , 'lua vim.lsp.buf.range_code_action()' }, + { "codeActionProvider", 'n', 'r', 'lua vim.lsp.buf.code_action{only = \'refactor\'}' }, + { "codeActionProvider", 'v', 'r', 'lua vim.lsp.buf.range_code_action{only = \'refactor\'}' }, +} + local ts_utils_setup = function(client, bufnr, opts) if client.name == 'tsserver' then -- Disable tsserver formatting, we want formatting via prettier @@ -113,31 +135,11 @@ local on_attach = function(client, bufnr) -- actually checking it below. ts_utils_setup(client, bufnr, opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd' , 'lua vim.lsp.buf.definition()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD' , 'lua vim.lsp.buf.declaration()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr' , 'lua vim.lsp.buf.references()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi' , 'lua vim.lsp.buf.implementation()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', '' , 'lua vim.lsp.buf.type_definition()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', '1gd' , 'lua vim.lsp.buf.document_symbol()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', '1gD' , 'lua vim.lsp.buf.workspace_symbol()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gR' , 'lua vim.lsp.buf.rename()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'pd' , 'lua PeekDefinition()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'k', 'lua vim.lsp.buf.hover()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'S', 'lua vim.lsp.buf.signature_help()' , opts) - - if client.server_capabilities.codeActionProvider then - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ga' , 'lua vim.lsp.buf.code_action()' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'v', 'ga' , 'lua vim.lsp.buf.range_code_action()', opts) - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'r', 'lua vim.lsp.buf.code_action{ only = \'refactor\' }' , opts) - vim.api.nvim_buf_set_keymap(bufnr, 'v', 'r', 'lua vim.lsp.buf.range_code_action{ only = \'refactor\' }', opts) - end - - if client.server_capabilities.documentRangeFormattingProvider then - vim.api.nvim_buf_set_keymap(bufnr, 'x', 'gq', 'lua FormatRangeOperator()', opts) - end - - if client.server_capabilities.documentFormattingProvider then - vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gq', 'lua vim.lsp.buf.format({async=true})', opts) + for _, mappings in pairs(lsp_key_mappings) do + local capability, mode, lhs, rhs = unpack(mappings) + if client.server_capabilities[capability] then + vim.api.nvim_buf_set_keymap(bufnr, mode, lhs, rhs, opts) + end end if client.server_capabilities.codeLensProvider or client.server_capabilities.documentHighlightProvider then