summaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua
blob: 3d2d765b713b98b0b99ec461a78ae42ca692cd22 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
local on_list = function(options)
	vim.fn.setqflist({}, " ", options)
	vim.api.nvim_command("cfirst")
end

local M = {
	["textDocument/documentHighlight"] = function(bufnr)
		vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
			buffer = bufnr,
			callback = vim.lsp.buf.document_highlight,
			desc = "lsp document highlight",
		})
		vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
			buffer = bufnr,
			callback = vim.lsp.buf.clear_references,
			desc = "lsp clear references",
		})
	end,
	["textDocument/signatureHelp"] = function(bufnr)
		vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, {
			buffer = bufnr,
			desc = "signature help",
		})
	end,
	["textDocument/declaration"] = function(bufnr)
		vim.keymap.set("n", "gD", function()
			vim.lsp.buf.declaration({ on_list = on_list })
		end, { buffer = bufnr, desc = "declaration" })
	end,
	["textDocument/definition"] = function(bufnr)
		vim.keymap.set("n", "gd", function()
			vim.lsp.buf.definition({ on_list = on_list })
		end, { buffer = bufnr, desc = "definition" })
	end,
	["textDocument/typeDefinition"] = function(bufnr)
		vim.keymap.set("n", "go", function()
			vim.lsp.buf.type_definition({ on_list = on_list })
		end, { buffer = bufnr, desc = "type definition" })
	end,
	["textDocument/implementation"] = function(bufnr)
		vim.keymap.set("n", "gi", function()
			vim.lsp.buf.implementation({ on_list = on_list })
		end, { buffer = bufnr, desc = "implementation" })
	end,
	["textDocument/inlayHint"] = function(bufnr)
		vim.lsp.inlay_hint(bufnr, true)
	end,
	["textDocument/references"] = function(bufnr)
		vim.keymap.set("n", "gr", function()
			vim.lsp.buf.references(nil, { on_list = on_list })
		end, { buffer = bufnr, desc = "references" })
	end,
	["textDocument/rename"] = function(bufnr)
		vim.keymap.set("n", "<leader>lr", vim.lsp.buf.rename, {
			buffer = bufnr,
			desc = "rename",
		})
	end,
	["textDocument/codeAction"] = function(bufnr)
		vim.keymap.set("n", "<leader>la", vim.lsp.buf.code_action, {
			buffer = bufnr,
			desc = "code action",
		})
	end,
	["experimental/externalDocs"] = function(bufnr)
		vim.keymap.set("n", "gx", vim.lsp.buf.external_docs, {
			buffer = bufnr,
			desc = "external_docs",
		})
	end,
}

return M