1local M = {}
2
3-- Helper function to set keymap for specific buffer with a description.
4local keymap = function(bufnr, mode, lhs, rhs, desc)
5 vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc, silent = true })
6end
7
8-- capabilities handler
9local cmp_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
10if cmp_ok then
11 M.capabilities = cmp_nvim_lsp.default_capabilities()
12else
13 M.capabilities = vim.lsp.protocol.make_client_capabilities()
14end
15
16-- on_attach handler
17M.on_attach = function(_, bufnr)
18 keymap(bufnr, "n", "K", vim.lsp.buf.hover, "Show Hover")
19 keymap(bufnr, "n", "gd", vim.lsp.buf.definition, "Goto Definition")
20 keymap(bufnr, "n", "gD", vim.lsp.buf.declaration, "Goto Declaration")
21 keymap(bufnr, "n", "gr", vim.lsp.buf.references, "Goto References")
22 keymap(bufnr, "n", "gI", vim.lsp.buf.implementation, "Goto Implementation")
23 keymap(bufnr, "n", "gs", vim.lsp.buf.signature_help, "Show Signature Help")
24 keymap(bufnr, "n", "gl", vim.diagnostic.open_float, "Show Line Diagnostics")
25 keymap(bufnr, "n", "]d", vim.diagnostic.goto_next, "Next Diagnostic")
26 keymap(bufnr, "n", "[d", vim.diagnostic.goto_prev, "Prev Diagnostic")
27end
28
29return M