diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index 4493869..6842dc3 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,31 +1,35 @@ local lspKeys = function(client, bufnr) - local options = { noremap = true, silent = false, buffer = bufnr } - vim.keymap.set({ 'n', 'x' }, 'a', vim.lsp.buf.code_action, vim.tbl_extend('error', options, { desc = 'Code action' })) - vim.keymap.set('n', 'e', vim.lsp.buf.declaration, vim.tbl_extend('error', options, { desc = 'Declaration' })) - vim.keymap.set('n', 'h', function() - vim.lsp.buf.hover({ border = 'none' }) - end, vim.tbl_extend('error', options, { desc = 'Hover' })) - vim.keymap.set('n', 'c', vim.lsp.buf.outgoing_calls, vim.tbl_extend('error', options, { desc = 'Outgoing calls' })) - vim.keymap.set('n', 'C', vim.lsp.buf.incoming_calls, vim.tbl_extend('error', options, { desc = 'Incoming calls' })) - vim.keymap.set('n', 'm', vim.lsp.buf.rename, vim.tbl_extend('error', options, { desc = 'Rename' })) - vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, vim.tbl_extend('error', options, { desc = 'Type definition' })) - vim.keymap.set({ 'n', 'i', 'x' }, '', vim.lsp.buf.signature_help, vim.tbl_extend('error', options, { desc = 'Signature help' })) - vim.keymap.set('n', 'v', function() - vim.diagnostic.open_float({ border = 'rounded' }) - end, vim.tbl_extend('error', options, { desc = 'Diagnostics Float' })) - vim.keymap.set('n', '', 'ClangdSwitchSourceHeader', vim.tbl_extend('error', options, { desc = 'Switch Source/Header' })) + local base_opts = { noremap = true, silent = false, buffer = bufnr } + + local function opts(desc) return vim.tbl_extend('error', base_opts, { desc = desc }) end + + local mappings = { + { mode = { 'n', 'x' }, key = 'a', fn = vim.lsp.buf.code_action, desc = 'Code action' }, + { mode = 'n', key = 'e', fn = vim.lsp.buf.declaration, desc = 'Declaration' }, + { mode = 'n', key = 'h', fn = function() vim.lsp.buf.hover({ border = 'none' }) end, desc = 'Hover' }, + { mode = 'n', key = 'c', fn = vim.lsp.buf.outgoing_calls, desc = 'Outgoing calls' }, + { mode = 'n', key = 'C', fn = vim.lsp.buf.incoming_calls, desc = 'Incoming calls' }, + { mode = 'n', key = 'm', fn = vim.lsp.buf.rename, desc = 'Rename' }, + { mode = 'n', key = 'D', fn = vim.lsp.buf.type_definition, desc = 'Type definition' }, + { mode = { 'n', 'i', 'x' }, key = '', fn = vim.lsp.buf.signature_help, desc = 'Signature help' }, + { mode = 'n', key = 'v', fn = function() vim.diagnostic.open_float({ border = 'rounded' }) end, desc = 'Diagnostics Float' }, + { mode = 'n', key = '', fn = 'ClangdSwitchSourceHeader', desc = 'Switch Source/Header' }, + } + + for _, map in ipairs(mappings) do + vim.keymap.set(map.mode, map.key, map.fn, opts(map.desc)) + end if client.supports_method('inlayHintProvider') then - vim.keymap.set('n', 'i', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr }) - end, { - noremap = true, - silent = false, - desc = 'Toggle inlay hints', - buffer = bufnr, - }) + vim.keymap.set( + 'n', + 'i', + function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr }) end, + opts('Toggle inlay hints') + ) end end + return { { 'neovim/nvim-lspconfig', @@ -83,12 +87,7 @@ return { disable = { 'missing-fields' }, }, format = { - enable = true, - defaultConfig = { - indent_style = 'space', - indent_size = '2', - quote_style = 'single', - }, + enable = false, }, }, }, @@ -131,9 +130,7 @@ return { callback = function(args) local bufnr = args.buf local client = vim.lsp.get_client_by_id(args.data.client_id) - if not client then - return - end + if not client then return end lspKeys(client, bufnr) if client.server_capabilities.completionProvider then @@ -141,17 +138,6 @@ return { vim.bo[bufnr].formatexpr = 'v:lua.vim.lsp.formatexpr()' end - if client.server_capabilities.inlayHintProvider then - vim.keymap.set('n', 'i', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr }) - end, { - noremap = true, - silent = false, - desc = 'Toggle inlay hints', - buffer = bufnr, - }) - end - if client.server_capabilities.documentSymbolProvider then local navic = require('nvim-navic') navic.attach(client, bufnr)