summaryrefslogtreecommitdiff
path: root/lua/plugins/lsp/config.lua
blob: 579cfec42ca3e47a98946e5bdac8f5360a6a757f (plain) (blame)
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
return {
	{
		"neovim/nvim-lspconfig",
		event = { "BufReadPre", "BufNewFile" },
		opts = { servers = {} },
		config = function(_, opts)
			local add_hook_after = require("lspconfig.util").add_hook_after
			local on_attach = function(client, bufnr)
				require("nvim-navic").attach(client, bufnr)
			end

			for lsp, lsp_opts in pairs(opts.servers) do
				lsp_opts = lsp_opts or {}
				if lsp_opts.on_attach ~= nil then
					lsp_opts["on_attach"] = add_hook_after(on_attach, lsp_opts.on_attach)
				end
				lsp_opts["capabilities"] = require("cmp_nvim_lsp").default_capabilities(
					lsp_opts.capabilities or {}
				)
				require("lspconfig")[lsp].setup(lsp_opts)
			end
		end,
		init = function()
			vim.diagnostic.config({
				float = {
					source = "always",
					format = function(diagnostic)
						-- should work for any LSP, see: https://github.com/neovim/neovim/pull/17510
						if diagnostic.code then
							return string.format(
								"(%s) %s",
								diagnostic.code,
								diagnostic.message
							)
						end
						return diagnostic.message
					end,
				},
			})
		end,
		dependencies = {
			{ "SmiteshP/nvim-navic", opts = { highlight = true } },
		},
	},
}