my neovim config, who would've thought
1local u = require "core.utils"
2
3vim.lsp.enable {
4 "elmls",
5 "gleam",
6 "golangci_lint_ls",
7 "gopls",
8 "jsonls",
9 "lua_ls",
10 "markdown_oxide",
11 "ts_ls",
12 "yamlls",
13}
14
15vim.api.nvim_create_user_command("LspRestart", function(opts)
16 vim.lsp.enable(opts.args, false)
17 vim.lsp.enable(opts.args, true)
18end, { nargs = 1, complete = u.lsp.get_clients })
19
20u.aucmd("LspAttach", {
21 group = u.augroup "lsp",
22 callback = function(args)
23 local bufnr = args.buf
24 local client = vim.lsp.get_client_by_id(args.data.client_id)
25 if not client then
26 error "couldn't get an lsp server"
27 end
28
29 if
30 client:supports_method(vim.lsp.protocol.Methods.textDocument_codeLens)
31 then
32 vim.lsp.codelens.refresh { bufnr = bufnr }
33 end
34
35 u.map("n", "<leader>lf", function()
36 vim.lsp.buf.format { async = true }
37 end, bufnr)
38
39 u.map("n", "gd", Snacks.picker.lsp_definitions, bufnr)
40 u.map("n", "gr", Snacks.picker.lsp_references, bufnr)
41 u.map("n", "gi", Snacks.picker.lsp_implementations, bufnr)
42 u.map("n", "gl", vim.diagnostic.open_float, bufnr)
43 u.map("n", "<leader>la", vim.lsp.buf.code_action, bufnr)
44 u.map("n", "<leader>lr", vim.lsp.buf.rename, bufnr)
45 u.map("n", "<leader>ll", vim.lsp.codelens.run, bufnr)
46 u.map("n", "<leader>ls", Snacks.picker.lsp_symbols)
47 u.map("n", "<leader>lS", Snacks.picker.lsp_workspace_symbols)
48 u.map("n", "<leader>li", function()
49 if vim.lsp.inlay_hint.is_enabled { bufnr = bufnr } then
50 vim.lsp.inlay_hint.enable(false, { bufnr = bufnr })
51 vim.print "Inlay hints disabled"
52 else
53 vim.lsp.inlay_hint.enable(true, { bufnr = bufnr })
54 vim.print "Inlay hints enabled"
55 end
56 end, bufnr)
57 end,
58})