summaryrefslogtreecommitdiff
path: root/lua/bee/LSPs/on_attach.lua
blob: d4d69e4e2c3af667fa4914c679180339926c1893 (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
-- vim.api.nvim_create_autocmd('LspAttach', {
--   group = vim.api.nvim_create_augroup('my-lsp-attach', { clear = true }),
--   callback = function(event)
--     require('birdee.LSPs.on_attach')(vim.lsp.get_client_by_id(event.data.client_id), event.buf)
--   end,
-- })
return function(_, bufnr)
	-- we create a function that lets us more easily define mappings specific
	-- for LSP related items. It sets the mode, buffer and description for us each time.

	local map = function(keys, func, desc, mode)
		if desc then
			desc = "LSP: " .. desc
		end
		vim.keymap.set(mode or "n", keys, func, { buffer = bufnr, desc = desc })
	end

	map("<leader>rn", vim.lsp.buf.rename, "[R]e[n]ame")
	map("<leader>la", vim.lsp.buf.code_action, "[L]sp [A]ction")

	-- See `:help K` for why this keymap
	map("K", vim.lsp.buf.hover, "Hover Documentation")
	map("<C-k>", vim.lsp.buf.signature_help, "Signature Documentation")

	-- Lesser used LSP functionality
	map("<leader>wa", vim.lsp.buf.add_workspace_folder, "[W]orkspace [A]dd Folder")
	map("<leader>wr", vim.lsp.buf.remove_workspace_folder, "[W]orkspace [R]emove Folder")
	map("<leader>wl", function()
		print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
	end, "[W]orkspace [L]ist Folders")

	-- Create a command `:Format` local to the LSP buffer
	vim.api.nvim_buf_create_user_command(bufnr, "Format", function(_)
		vim.lsp.buf.format()
	end, { desc = "Format current buffer with LSP" })
	map("<leader>Fl", ":Format<CR>", "[F]ormat with [l]sp")
	map("<leader>FL", ":Format<CR>", "[F]ormat with [L]SP")
	-- The following two autocommands are used to highlight references of the
	-- word under your cursor when your cursor rests there for a little while.
	--    See `:help CursorHold` for information about when this is executed
	-- When you move your cursor, the highlights will be cleared (the second autocommand).
	-- local client = vim.lsp.get_client_by_id(event.data.client_id)
	-- if client and client.server_capabilities.documentHighlightProvider then
	--   vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
	--     buffer = event.buf,
	--     callback = vim.lsp.buf.document_highlight,
	--   })

	--   vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
	--     buffer = event.buf,
	--     callback = vim.lsp.buf.clear_references,
	--   })
	-- end
end