aboutsummaryrefslogtreecommitdiff
path: root/modules/neovim/lsp.lua
blob: ad6cddfcf212d78cb791c73afa3bbeec045b0878 (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
55
56
57
-- builtin neovim lsp configuration
vim.opt.cot = "menu,menuone,noselect"
--vim.opt.cot = "menu,menuone"

local methods = vim.lsp.protocol.Methods
local map = vim.keymap.set

-- hook that makes every floating window opened by nvim lsp rounded
local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview 
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
  opts = opts or {}
  opts.border = opts.border or "rounded"
  return orig_util_open_floating_preview(contents, syntax, opts, ...)
end

vim.diagnostic.config({
--  virtual_text = { prefix = "", virt_text_pos = "eol_right_align",  },
  virtual_text = false,
  float = { border = "rounded" },
  signs = false,
  underline = true,
  update_in_insert = false,
  float = true,
  jump = { float = true }
})

local function pumvisible()
  return tonumber(vim.fn.pumvisible()) ~= 0
end

vim.api.nvim_create_autocmd("LspAttach", { callback = function(args) 
  local client = vim.lsp.get_client_by_id(args.data.client_id)

--  fun but gets annoying
--  if client:supports_method(methods.textDocument_inlayHint) then
--    vim.lsp.inlay_hint.enable()
--  end
    
  map('n', 'E', '<cmd>lua vim.lsp.buf.hover()<CR>', { silent = true })

  if client:supports_method(methods.textDocument_completion) then
    vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = false })
    vim.keymap.set('i', '<C-n>', function() 
      return pumvisible() and '<C-n>' or vim.lsp.completion.trigger() 
    end)
  end

-- autoformat on save
  if client:supports_method(methods.textDocument_formatting) then
    vim.api.nvim_create_autocmd("BufWritePre", {
      buffer = args.buf,
      callback = function()
        vim.lsp.buf.format({bufnr = args.buf, id = client_id})
      end
    })
  end
end})