aboutsummaryrefslogtreecommitdiffhomepage
path: root/.config/nvim/lua/vimrc/lsp.lua
blob: e2932a714d388bf976bba9599703841b2b817100 (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
local is_deno_repo = vim.fs.root(0, { 'deno.json', 'deno.jsonc' }) ~= nil

local servers = { 'gopls', 'phpactor', 'zls', 'efm' }
if is_deno_repo then
   table.insert(servers, 'denols')
else
   table.insert(servers, 'ts_ls')
end

vim.lsp.enable(servers)

vim.api.nvim_create_autocmd('LspAttach', {
   group = vim.api.nvim_create_augroup('UserLspConfig', {}),
   callback = function(e)
      local client = assert(vim.lsp.get_client_by_id(e.data.client_id))

      if client:supports_method('textDocument/completion') then
         vim.lsp.completion.enable(true, client.id, e.buf, { autotrigger = true })
      end

      if client:supports_method('textDocument/formatting') then
         vim.keymap.set('n', '<space>f', function()
            vim.lsp.buf.format({
               bufnr = e.buf,
               id = client.id,
               async = true,
               filter = function(client) return client.name ~= "ts_ls" end,
            })
         end, { buffer = e.buf })

         if not client:supports_method('textDocument/willSaveWaitUntil') then
            vim.api.nvim_create_autocmd('BufWritePre', {
               group = vim.api.nvim_create_augroup('UserLspConfig', { clear = false }),
               buffer = e.buf,
               callback = function()
                  vim.lsp.buf.format({
                     bufnr = e.buf,
                     id = client.id,
                     timeout_ms = 5000,
                     filter = function(client) return client.name ~= "ts_ls" end,
                  })
               end
            })
         end
      end
   end,
})