-- local lsp = require('lsp-zero') local lsp_zero = require("lsp-zero") local cmp = require("cmp") require("luasnip.loaders.from_vscode").lazy_load() lsp_zero.preset("recommended") lsp_zero.setup() lsp_zero.on_attach(function(client_id, bufnr) lsp_zero.default_keymaps({ buffer = bufnr }) end) require("mason").setup({}) require("mason-lspconfig").setup({ ensure_installed = { "tsserver", "rust_analyzer" }, handlers = { lsp_zero.default_setup, }, }) cmp.setup({ snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, window = {}, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), [""] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, }, { { name = "buffer" }, }), }) function PrintDiagnostics(opts, bufnr, line_nr, client_id) bufnr = bufnr or 0 line_nr = line_nr or (vim.api.nvim_win_get_cursor(0)[1] - 1) opts = opts or { ["lnum"] = line_nr } local line_diagnostics = vim.diagnostic.get(bufnr, opts) if vim.tbl_isempty(line_diagnostics) then return end local diagnostic_message = "" for i, diagnostic in ipairs(line_diagnostics) do diagnostic_message = diagnostic_message .. string.format("%d: %s", i, diagnostic.message or "") print(diagnostic_message) if i ~= #line_diagnostics then diagnostic_message = diagnostic_message .. "\n" end end vim.api.nvim_echo({ { diagnostic_message, "Normal" } }, false, {}) end vim.cmd([[ autocmd! CursorHold * lua PrintDiagnostics() ]])