summaryrefslogtreecommitdiff
path: root/lua/lsp.lua
blob: 2f9539d23dc964211ec5d4941faa858e1a4a636b (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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("<s-f12>", function()
        vim.cmd("sp")
        vim.lsp.buf.definition()
    end, "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" },
})