2023-11-18 02:27:14 +02:00
|
|
|
-- This module contains lsp related
|
|
|
|
-- reusable functions
|
2023-04-26 21:41:28 +03:00
|
|
|
local m = {}
|
|
|
|
|
2024-01-26 16:47:55 +02:00
|
|
|
local lsp = vim.lsp
|
|
|
|
local diagnostic = vim.diagnostic
|
2024-08-08 11:47:17 +03:00
|
|
|
local k = vim.keymap.set
|
2024-01-26 16:47:55 +02:00
|
|
|
|
2023-11-18 22:31:15 +02:00
|
|
|
-- Maps LSP specific keybinds.
|
2023-11-18 02:27:14 +02:00
|
|
|
-- This makes them only available when LSP is running
|
2024-01-26 16:47:55 +02:00
|
|
|
function m.map_keys()
|
|
|
|
local builtin = require("telescope.builtin")
|
2024-07-13 15:49:55 +03:00
|
|
|
|
|
|
|
require("which-key").add({
|
|
|
|
{ "<leader>w", group = "Workspace" },
|
2023-04-26 21:41:28 +03:00
|
|
|
})
|
2024-07-13 15:49:55 +03:00
|
|
|
|
2024-08-08 11:47:17 +03:00
|
|
|
k("n", "<leader>F", lsp.buf.format, { desc = "Format with LSP" })
|
|
|
|
k("n", "<leader>ca", lsp.buf.code_action, { desc = "Code action" })
|
|
|
|
k("n", "<leader>e", diagnostic.open_float, { desc = "Open diagnostics" })
|
|
|
|
k("n", "<leader>k", lsp.buf.signature_help, { desc = "Signature help" })
|
|
|
|
k("n", "<leader>rn", lsp.buf.rename, { desc = "Rename symbol" })
|
|
|
|
k("n", "<leader>wa", lsp.buf.add_workspace_folder, { desc = "Add folder" })
|
|
|
|
k("n", "<leader>wl", function()
|
2024-07-13 15:49:55 +03:00
|
|
|
print(vim.inspect(lsp.buf.list_workspace_folders()))
|
|
|
|
end, { desc = "List folders" })
|
2024-08-08 11:47:17 +03:00
|
|
|
k("n", "<leader>wr", lsp.buf.remove_workspace_folder, { desc = "Remove folder" })
|
|
|
|
k("n", "K", lsp.buf.hover, { desc = "Hover" })
|
|
|
|
k("n", "[d", diagnostic.goto_prev, { desc = "Previous diagnostic" })
|
|
|
|
k("n", "]d", diagnostic.goto_next, { desc = "Next diagnostic" })
|
|
|
|
k("n", "gD", lsp.buf.declaration, { desc = "Declaration" })
|
|
|
|
k("n", "gd", builtin.lsp_definitions, { desc = "Definition" })
|
|
|
|
k("n", "gi", builtin.lsp_implementations, { desc = "Implementation" })
|
|
|
|
k("n", "gr", builtin.lsp_references, { desc = "References" })
|
|
|
|
k("n", "gs", builtin.lsp_document_symbols, { desc = "Symbols" })
|
|
|
|
k("n", "gt", lsp.buf.type_definition, { desc = "Type definition" })
|
2023-04-26 21:41:28 +03:00
|
|
|
end
|
|
|
|
|
2023-11-18 22:31:15 +02:00
|
|
|
-- Combine built-in LSP and cmp cabaibilities
|
|
|
|
-- and additional capabilities from other plugins
|
2023-11-17 16:48:28 +02:00
|
|
|
function m.get_capabilities()
|
|
|
|
local capabilities = vim.tbl_deep_extend(
|
|
|
|
"force",
|
2024-01-26 16:47:55 +02:00
|
|
|
lsp.protocol.make_client_capabilities(),
|
2023-11-17 16:48:28 +02:00
|
|
|
require("cmp_nvim_lsp").default_capabilities()
|
|
|
|
)
|
|
|
|
|
2023-11-20 21:14:45 +02:00
|
|
|
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually for ufo
|
2023-11-21 07:52:05 +02:00
|
|
|
capabilities.textDocument.foldingRange = {
|
|
|
|
dynamicRegistration = false,
|
|
|
|
lineFoldingOnly = true,
|
|
|
|
}
|
2023-11-17 16:48:28 +02:00
|
|
|
return capabilities
|
|
|
|
end
|
|
|
|
|
2023-04-26 21:41:28 +03:00
|
|
|
return m
|