summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/my/lsp.lua
blob: 2fad5aa7e16553f4072c8f1d1ea360da1f43c383 (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
function set_buf_opt(buf, name, value)
  return function() vim.api.nvim_buf_set_option(buf, name, value) end
end

function buf_map(mode, key, fn)
  return function() vim.keymap.set(mode, key, fn, {silent= true,  noremap = true, buffer = 0}) end
end

function lsp_action(action)
  return vim.lsp.buf[action]
end

local capability_map = {
  -- completionProvider = (set_buf_opt :omnifunc "v:lua.vim.lsp.omnifunc"),
      -- hoverProvider = set_buf_opt("keywordprg", ":LspHover"),
          renameProvider = buf_map("n", "<leader>gr", lsp_action("rename")),
   signatureHelpProvider = buf_map("n", "<leader>gs", lsp_action("signature_help")),
      definitionProvider = buf_map("n", "<leader>gd", lsp_action("definition")),
             declaration = buf_map("n", "<leader>gD", lsp_action("declaration")),
  implementationProvider = buf_map("n", "<leader>gi", lsp_action("implementation")),
      referencesProvider = buf_map("n", "<leader>gg", lsp_action("references")),
  documentSymbolProvider = buf_map("n", "<leader>gds", lsp_action("workspace_symbol")),
      codeActionProvider = buf_map("n", "<leader>ga", lsp_action("code_action")),
        codeLensProvider = buf_map("n", "<leader>gl", vim.lsp.codelens.run),
      inlayHintProvider = function()
        vim.lsp.inlay_hint.enable(true)
        buf_map("n", "<leader>gh", function() vim.lsp.inlay_hint.enable(0, not vim.lsp.inlay_hint.is_enabled(0)) end)
      end,
     documentFormattingProvider = function()
      set_buf_opt("formatexpr", "v:lua.vim.lsp.format()")
      buf_map("n", "<leader>gq", function() vim.lsp.buf.format({async= true}) end)
    end,
}

local M = {}

M.attach = function (ev)
  vim.iter(ev.client.server_capabilities)
    :each(function(c)
      local fn = capability_map[c]
      if fn then fn() end
    end)
  ev.client.capabilities = require('blink.cmp').get_lsp_capabilities(ev.client.capabilities)
end

return M