local function toggle_diag_virtext() local virtual_text = { -- Default virtual_text opts from Lazy.Nvim spacing = 4, source = "if_many", prefix = "●", } local config = vim.diagnostic.config() if type(config.virtual_text) == "table" then config.virtual_text = false vim.diagnostic.config(config) vim.notify("Disable diagnostics virtualtext", 5, { title = "Diagnostics" }) else config.virtual_text = virtual_text vim.diagnostic.config(config) vim.notify("Enabled diagnostics virtualtext", 5, { title = "Diagnostics" }) end end return { { "neovim/nvim-lspconfig", init = function() local keys = require("lazyvim.plugins.lsp.keymaps").get() keys[#keys + 1] = { "gr", "Glance references", desc = "References" } keys[#keys + 1] = { "gy", "Glance type_definitions", desc = "Goto t[y]pe definitions" } keys[#keys + 1] = { "gI", "Glance implementations", desc = "Goto implementations" } keys[#keys + 1] = { "ca", require("actions-preview").code_actions, desc = "Code Action Preview" } keys[#keys + 1] = { "cl", false } keys[#keys + 1] = { "cil", "LspInfo", desc = "Lsp" } keys[#keys + 1] = { "uv", toggle_diag_virtext, desc = "Toggle Diagnostic VirtualText" } keys[#keys + 1] = { "cll", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", desc = "List Folders", } keys[#keys + 1] = { "clh", vim.lsp.codelens.run, desc = "Run Code Lens" } keys[#keys + 1] = { "cld", vim.lsp.codelens.refresh, desc = "Refresh Code Lens" } keys[#keys + 1] = { "clr", "LspRestart", desc = "Restart Lsp" } keys[#keys + 1] = { "cls", "LspStart", desc = "Start Lsp" } keys[#keys + 1] = { "clS", "LspStop", desc = "Stop Lsp" } require("lazyvim.util").lsp.on_attach(function(client, buffer) if client.supports_method("textDocument/documentSymbol") then -- Enable inlay hints if the client supports it. if client.server_capabilities.inlayHintProvider then local inlay_hints_group = vim.api.nvim_create_augroup("InlayHints", { clear = true }) -- Initial inlay hint display. local mode = vim.api.nvim_get_mode().mode vim.lsp.inlay_hint(buffer, mode == "n" or mode == "v") vim.api.nvim_create_autocmd("InsertEnter", { group = inlay_hints_group, buffer = buffer, callback = function() vim.lsp.inlay_hint(buffer, false) end, }) vim.api.nvim_create_autocmd("InsertLeave", { group = inlay_hints_group, buffer = buffer, callback = function() vim.lsp.inlay_hint(buffer, true) end, }) end end end) end, opts = { -- options for vim.diagnostic.config() diagnostics = { virtual_text = { float = { border = { { "┌", "FloatBorder" }, { "─", "FloatBorder" }, { "┐", "FloatBorder" }, { "│", "FloatBorder" }, { "┘", "FloatBorder" }, { "─", "FloatBorder" }, { "└", "FloatBorder" }, { "│", "FloatBorder" }, }, }, }, }, inlay_hints = { enabled = true, }, servers = { lua_ls = { settings = { Lua = { hint = { enable = true, }, }, }, }, tsserver = { init_options = { preferences = { disableSuggestions = true, }, }, settings = { typescript = { format = { indentSize = vim.o.shiftwidth, convertTabsToSpaces = vim.o.expandtab, tabSize = vim.o.tabstop, }, inlayHints = { includeInlayParameterNameHints = "all", includeInlayParameterNameHintsWhenArgumentMatchesName = false, includeInlayFunctionParameterTypeHints = true, includeInlayVariableTypeHints = false, includeInlayVariableTypeHintsWhenTypeMatchesName = false, includeInlayPropertyDeclarationTypeHints = true, includeInlayFunctionLikeReturnTypeHints = true, includeInlayEnumMemberValueHints = true, }, }, javascript = { format = { indentSize = vim.o.shiftwidth, convertTabsToSpaces = vim.o.expandtab, tabSize = vim.o.tabstop, }, inlayHints = { includeInlayParameterNameHints = "all", includeInlayParameterNameHintsWhenArgumentMatchesName = false, includeInlayFunctionParameterTypeHints = true, includeInlayVariableTypeHints = false, includeInlayVariableTypeHintsWhenTypeMatchesName = false, includeInlayPropertyDeclarationTypeHints = true, includeInlayFunctionLikeReturnTypeHints = true, includeInlayEnumMemberValueHints = true, }, }, completions = { completeFunctionCalls = true, }, }, }, }, }, }, { "aznhe21/actions-preview.nvim", event = "LspAttach", opts = { telescope = { sorting_strategy = "ascending", layout_strategy = "vertical", layout_config = { width = 0.8, height = 0.9, prompt_position = "top", preview_cutoff = 20, preview_height = function(_, _, max_lines) return max_lines - 15 end, }, }, }, }, { "smjonas/inc-rename.nvim", cmd = "IncRename", opts = {}, }, { "dnlhc/glance.nvim", cmd = { "Glance" }, opts = { border = { enable = true, }, }, }, { "simrat39/rust-tools.nvim", lazy = true, opts = function(_, opts) opts.tools = { inlay_hints = { auto = false, }, } end, }, { "hinell/lsp-timeout.nvim", event = "LspAttach", enabled = false, dependencies = { "neovim/nvim-lspconfig" }, init = function() vim.g["lsp-timeout-config"] = { startTimeout = 1000 * 1, -- ms before restart } end, }, { "VidocqH/lsp-lens.nvim", event = "BufReadPost", opts = { sections = { definition = false, references = function(count) return " Ref: " .. count end, implements = function(count) return "󱁤 Imp: " .. count end, git_authors = false, }, }, keys = { { "ue", "LspLensToggle", desc = "Toggle Lsp Lens" }, }, }, }