summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/my/lsp.lua
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2025-02-08 08:16:07 +0100
committerMike Vink <mike@pionative.com>2025-02-08 08:16:07 +0100
commit7d30d2272ef59166c1b382cab324a400a42d577d (patch)
tree8f153f04818c7622b9cd2a3e1a18f9dcce1a1104 /.config/nvim/lua/my/lsp.lua
parentfd48011d2ef530b392df72e8685da4e8a2a54d1d (diff)
copy config
Diffstat (limited to '.config/nvim/lua/my/lsp.lua')
-rw-r--r--.config/nvim/lua/my/lsp.lua46
1 files changed, 46 insertions, 0 deletions
diff --git a/.config/nvim/lua/my/lsp.lua b/.config/nvim/lua/my/lsp.lua
new file mode 100644
index 0000000..2fad5aa
--- /dev/null
+++ b/.config/nvim/lua/my/lsp.lua
@@ -0,0 +1,46 @@
+function set_buf_opt(buf, name, value)
+ return function() vim.api.nvim_buf_set_option(buf, name, value) end
+end
+
+function buf_map(mode, key, fn)
+ return function() vim.keymap.set(mode, key, fn, {silent= true, noremap = true, buffer = 0}) end
+end
+
+function lsp_action(action)
+ return vim.lsp.buf[action]
+end
+
+local capability_map = {
+ -- completionProvider = (set_buf_opt :omnifunc "v:lua.vim.lsp.omnifunc"),
+ -- hoverProvider = set_buf_opt("keywordprg", ":LspHover"),
+ renameProvider = buf_map("n", "<leader>gr", lsp_action("rename")),
+ signatureHelpProvider = buf_map("n", "<leader>gs", lsp_action("signature_help")),
+ definitionProvider = buf_map("n", "<leader>gd", lsp_action("definition")),
+ declaration = buf_map("n", "<leader>gD", lsp_action("declaration")),
+ implementationProvider = buf_map("n", "<leader>gi", lsp_action("implementation")),
+ referencesProvider = buf_map("n", "<leader>gg", lsp_action("references")),
+ documentSymbolProvider = buf_map("n", "<leader>gds", lsp_action("workspace_symbol")),
+ codeActionProvider = buf_map("n", "<leader>ga", lsp_action("code_action")),
+ codeLensProvider = buf_map("n", "<leader>gl", vim.lsp.codelens.run),
+ inlayHintProvider = function()
+ vim.lsp.inlay_hint.enable(true)
+ buf_map("n", "<leader>gh", function() vim.lsp.inlay_hint.enable(0, not vim.lsp.inlay_hint.is_enabled(0)) end)
+ end,
+ documentFormattingProvider = function()
+ set_buf_opt("formatexpr", "v:lua.vim.lsp.format()")
+ buf_map("n", "<leader>gq", function() vim.lsp.buf.format({async= true}) end)
+ end,
+}
+
+local M = {}
+
+M.attach = function (ev)
+ vim.iter(ev.client.server_capabilities)
+ :each(function(c)
+ local fn = capability_map[c]
+ if fn then fn() end
+ end)
+ ev.client.capabilities = require('blink.cmp').get_lsp_capabilities(ev.client.capabilities)
+end
+
+return M