summaryrefslogtreecommitdiffstats
path: root/dotfiles/vim-dev.lua
blob: 6b780220129fcf5cbce4ed0bc57c04eaa12f14d8 (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
local lspconfig = require("lspconfig")

function on_attach(client, bufnr)
	local function buf_set_keymap(...)
		vim.api.nvim_buf_set_keymap(bufnr, ...)
	end

	local opts = { noremap = true, silent = true }

	buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
	buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
	buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)

	buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)

	buf_set_keymap('n', '<leader>sa', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
	buf_set_keymap('n', '<leader>se', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
	buf_set_keymap('n', '<leader>sl', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
	buf_set_keymap('n', '<leader>sr', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)

	buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
	buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)

	-- Capability specific

	-- print(vim.inspect(client.resolved_capabilities))

	if client.resolved_capabilities.document_formatting then
		buf_set_keymap("n", "<leader>sf", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
	end
	if client.resolved_capabilities.document_range_formatting then
		buf_set_keymap("v", "<leader>sf", "<cmd>lua vim.lsp.buf.range_formatting()<CR>", opts)
	end

	-- Rust specific
	buf_set_keymap("n", "<leader>sh", "<cmd>RustToggleInlayHints<CR>", opts)

	require("completion").on_attach()
end

function setup_lsp_with(servers)
	for _, server in ipairs(servers) do
		lspconfig[server].setup {
			cmd = { vim.g[server .. "_path"] },
			on_attach = on_attach,
		}
	end
end

setup_lsp_with {
	"clangd",
	"elixirls",
	"pyls",
}

require("rust-tools").setup {
	server = {
		cmd = { vim.g.rust_analyzer_path },
		on_attach = on_attach,
	}
}