summaryrefslogtreecommitdiff
path: root/lua/plugins/lsp/config.lua
blob: 38aec3d49db80852557001fad462c70eba7e304b (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
46
47
48
49
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 {}
               )
            lsp_opts.capabilities.textDocument.completion.completionItem.snippetSupport =
               true
            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 } },
      },
   },
}