local u = require "core.utils" vim.lsp.enable { "elmls", "gleam", "golangci_lint_ls", "gopls", "jsonls", "lua_ls", "markdown_oxide", "ts_ls", "yamlls", } vim.api.nvim_create_user_command("LspRestart", function(opts) vim.lsp.enable(opts.args, false) vim.lsp.enable(opts.args, true) end, { nargs = 1, complete = u.lsp.get_clients }) u.aucmd("LspAttach", { group = u.augroup "lsp", callback = function(args) local bufnr = args.buf local client = vim.lsp.get_client_by_id(args.data.client_id) if not client then error "couldn't get an lsp server" end if client:supports_method(vim.lsp.protocol.Methods.textDocument_codeLens) then vim.lsp.codelens.refresh { bufnr = bufnr } end u.map("n", "lf", function() vim.lsp.buf.format { async = true } end, bufnr) u.map("n", "gd", Snacks.picker.lsp_definitions, bufnr) u.map("n", "gr", Snacks.picker.lsp_references, bufnr) u.map("n", "gi", Snacks.picker.lsp_implementations, bufnr) u.map("n", "gl", vim.diagnostic.open_float, bufnr) u.map("n", "la", vim.lsp.buf.code_action, bufnr) u.map("n", "lr", vim.lsp.buf.rename, bufnr) u.map("n", "ll", vim.lsp.codelens.run, bufnr) u.map("n", "ls", Snacks.picker.lsp_symbols) u.map("n", "lS", Snacks.picker.lsp_workspace_symbols) u.map("n", "li", function() if vim.lsp.inlay_hint.is_enabled { bufnr = bufnr } then vim.lsp.inlay_hint.enable(false, { bufnr = bufnr }) vim.print "Inlay hints disabled" else vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) vim.print "Inlay hints enabled" end end, bufnr) end, })