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
58
59
60
61
62
63
64
65
66
67
|
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = { "clangd" },
})
local cmp = require("cmp")
cmp.setup({
completion = {
autocomplete = false,
},
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
sources = cmp.config.sources({
{
name = "nvim_lsp",
entry_filter = function(entry, ctx)
if entry:get_kind() == 15 then -- Snippet
return false
end
return true
end,
},
}),
mapping = cmp.mapping.preset.insert({
["<cr>"] = cmp.mapping.confirm({ select = true }),
["<esc>"] = cmp.mapping.abort(),
["<c-space>"] = cmp.mapping.complete(),
})
})
local lsp_capabilities = require("cmp_nvim_lsp").default_capabilities()
lsp_capabilities.textDocument.completion.completionItem.snipperSupport = false
local lsp_on_attach = function(client, b)
local nmap = function(keys, func, desc)
vim.keymap.set("n", keys, func, { buffer = b, desc = desc })
end
nmap("<f2>", vim.lsp.buf.rename, "Rename symbol")
nmap("<leader>ca", vim.lsp.buf.code_action, "Code action")
nmap("<f12>", vim.lsp.buf.definition, "Go to definition")
nmap("<leader>fr", require("telescope.builtin").lsp_references, "Find references")
nmap("<c-o>", require("telescope.builtin").lsp_document_symbols, "Find document symbols")
nmap("<c-h>", vim.lsp.buf.hover, "Signature help")
end
local lspconfig = require("lspconfig")
require("mason-lspconfig").setup_handlers({
function (server_name)
lspconfig[server_name].setup({
on_attach = lsp_on_attach,
capabilities = lsp_capabilities,
})
end
})
lspconfig.clangd.setup({
on_attach = lsp_on_attach,
capabilities = lsp_capabilities,
cmd = { "C:\\Program Files\\LLVM-15\\bin\\clangd.exe" },
})
|