aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/home/.config/nvim/lua/cfg/lsp.lua
blob: 894b5789937a390f5dcb207b035b9f394fd62a6f (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
50
51
52
53
local M = {}
local map = require("mapper")
local lspconfig = require("lspconfig")

function M.on_attach_wrapper(client, bufnr, opts)
  local autocmd = vim.api.nvim_create_autocmd

  if client.supports_method("textDocument/codeLens") then
    autocmd(
      { "CursorHold", "CursorHoldI", "InsertLeave" },
      { buffer = bufnr, callback = vim.lsp.codelens.refresh }
    )
    map.n("gl", vim.lsp.codelens.run, { buffer = bufnr })
  end

  map.n("<c-]>", vim.lsp.buf.definition, { buffer = bufnr })
  map.n("gD", vim.lsp.buf.declaration, { buffer = bufnr })
  map.n("gR", vim.lsp.buf.rename, { buffer = bufnr })
  map.n("ga", vim.lsp.buf.code_action, { buffer = bufnr })
  map.v("ga", vim.lsp.buf.code_action, { buffer = bufnr })
end

function M.switch_source_header_splitcmd(bufnr, splitcmd)
  bufnr = lspconfig.util.validate_bufnr(bufnr)
  local clangd_client = lspconfig.util.get_active_client_by_name(
    bufnr,
    "clangd"
  )
  local params = { uri = vim.uri_from_bufnr(bufnr) }
  if clangd_client then
    clangd_client.request(
      "textDocument/switchSourceHeader",
      params,
      function(err, result)
        if err then
          error(tostring(err))
        end
        if not result then
          print("Corresponding file cannot be determined")
          return
        end
        vim.api.nvim_command(splitcmd .. " " .. vim.uri_to_fname(result))
      end,
      bufnr
    )
  else
    print(
      "method textDocument/switchSourceHeader is not supported by any servers active on the current buffer"
    )
  end
end

return M