by

Neovim LspAttach autocommand

An example LspAttach autocommand I use for Neovim. Adds some keybinds but configure as desired.

We run on LspAttach commands.

local group = vim.api.nvim_create_augroup("LspMappings", { clear = true })
vim.api.nvim_create_autocmd("LspAttach", {
	group = group,
	callback = function(args)
		local opts = { buffer = args.buf, silent = true }

		set(n, "gd", function() vim.lsp.buf.definition({}) end, opts)
		set(n, "K", vim.lsp.buf.hover, opts)
		set(n, "<c-s-K>", vim.lsp.buf.signature_help, opts)
		set(n, "gD", function() vim.lsp.buf.implementation({}) end, opts)
		set(n, "1gD", function() vim.lsp.buf.type_definition({}) end, opts)
		set(n, "gr", function() vim.lsp.buf.references() end, opts)

		set(n, "<c-]>", function() vim.lsp.buf.declaration({}) end, opts)

		set(n, "<Leader>re", vim.lsp.buf.rename, opts)
		set(n, "<Leader>ca", vim.lsp.buf.code_action, opts)
		set(n, "<Leader>ih", function()
            -- toggles inlay hints
			vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
		end, opts)

		-- diagnostics
		set(n, "<Leader>di", vim.diagnostic.open_float, opts)
		set(n, "<Leader>k", function()
			vim.diagnostic.jump({ float = true, count = -1 })
		end, opts)
		set(n, "<Leader>j", function()
			vim.diagnostic.jump({ float = true, count = 1 })
		end, opts)
	end,
})