summaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config/nvim/lua/tobyvin/lsp/init.lua
blob: 48332e48dacb7327398ca4ac27a1d8de62c26b2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
local M = {}

M.on_attach = function(client, bufnr)
	local nmap = require("tobyvin.utils").create_map_group("n", "<leader>l", "LSP", { buffer = bufnr })
	local nmap_goto = require("tobyvin.utils").create_map_group("n", "<leader>lg", "Goto", { buffer = bufnr })

	nmap("a", vim.lsp.buf.code_action, { desc = "Code Action" })
	nmap("d", "<cmd>TroubleToggle document_diagnostics<cr>", { desc = "Document Diagnostics" })
	nmap("D", "<cmd>TroubleToggle workspace_diagnostics<cr>", { desc = "Workspace Diagnostics" })
	nmap("h", vim.lsp.buf.hover, { desc = "Hover" })
	nmap("H", vim.lsp.buf.signature_help, { desc = "Signature Help" })
	nmap("j", vim.diagnostic.goto_next, { desc = "Next Diagnostic" })
	nmap("k", vim.diagnostic.goto_prev, { desc = "Prev Diagnostic" })
	nmap("l", vim.lsp.codelens.run, { desc = "CodeLens Action" })
	nmap("o", "<cmd>SymbolsOutline<cr>", { desc = "Outline" })
	-- nmap("q", vim.lsp.diagnostic.setloclist, { desc = "Quickfix" })
	nmap("r", vim.lsp.buf.rename, { desc = "Rename" })
	nmap("R", "<cmd>TroubleToggle lsp_references<cr>", { desc = "References" })
	nmap("s", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document Symbols" })
	nmap("S", "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", { desc = "Workspace Symbols" })
	nmap("w", "<cmd>Telescope lsp_workspace_diagnostics<cr>", { desc = "Workspace Diagnostics" })
	nmap_goto("d", vim.lsp.buf.definition, { desc = "Definition" })
	nmap_goto("D", vim.lsp.buf.declaration, { desc = "Declaration" })
	nmap_goto("i", vim.lsp.buf.implementation, { desc = "Implementation" })
	nmap_goto("r", vim.lsp.buf.references, { desc = "References" })

  -- disabled in favor of https://github.com/nvim-treesitter/nvim-treesitter-refactor#highlight-definitions
	-- require("tobyvin.lsp.highlighting").on_attach(client, bufnr)
	require("tobyvin.lsp.formatting").on_attach(client, bufnr)
	require("lsp_signature").on_attach()
end

M.config = function(config)
	local capabilities = vim.lsp.protocol.make_client_capabilities()
	capabilities.textDocument.completion.completionItem.snippetSupport = true
	capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities)

	return vim.tbl_deep_extend("force", {
		capabilities = capabilities,
		on_attach = M.on_attach,
	}, config or {})
end

M.setup = function()
	require("tobyvin.lsp.handlers").setup()
end

return M