1local function set_key(mode, keys, v, opts)
2 return vim.keymap.set(mode, keys, v, opts)
3end
4
5local function on_attach(client, bufnr)
6 local bufopts = { noremap = true, silent = true, buffer = bufnr }
7 set_key("n", "gD", vim.lsp.buf.declaration, bufopts)
8 set_key("n", "gd", vim.lsp.buf.definition, bufopts)
9 set_key("n", "K", vim.lsp.buf.hover, bufopts)
10 set_key("n", "gi", vim.lsp.buf.implementation, bufopts)
11 set_key("n", "gr", vim.lsp.buf.references, bufopts)
12 set_key("n", "<C-s>", vim.lsp.buf.signature_help, bufopts)
13 set_key("n", "<space>rn", vim.lsp.buf.declaration, bufopts)
14 set_key("n", "<space>ca", vim.lsp.buf.code_action, bufopts)
15 return bufnr
16end
17
18local function setup(f)
19 vim.lsp.enable(f)
20 return vim.lsp.config(f, { on_attach = on_attach })
21end
22
23local function load_all(l)
24 for _, v in ipairs(l) do
25 setup(v)
26 end
27 return nil
28end
29
30load_all({
31 "rust_analyzer",
32 "clangd",
33 "cssls",
34 "html",
35 "emmet_ls",
36 "pylsp",
37 "zls",
38 "ts_ls",
39 "terraformls",
40 "tsp_server",
41})
42
43vim.lsp.enable("gopls")
44vim.lsp.config("gopls", {
45 cmd_env = { GOFLAGS = "-tags=unit,integration,e2e" },
46 on_attach = on_attach,
47})
48vim.lsp.enable("lua_ls")
49vim.lsp.config("lua_ls", {
50 on_attach = on_attach,
51 settings = {
52 Lua = {
53 diagnostics = {
54 globals = { "vim" },
55 },
56 },
57 },
58})