From bec2c982ff6dcfff6dc76fc39cd0984384abad3e Mon Sep 17 00:00:00 2001 From: ache Date: Sun, 21 Dec 2025 10:27:53 +0100 Subject: feat: add line diagnostics with tools info to lsp and create new keymap for it --- lua/ache/diagnostics.lua | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 lua/ache/diagnostics.lua (limited to 'lua/ache/diagnostics.lua') diff --git a/lua/ache/diagnostics.lua b/lua/ache/diagnostics.lua new file mode 100644 index 0000000..5f70177 --- /dev/null +++ b/lua/ache/diagnostics.lua @@ -0,0 +1,55 @@ +local M = {} + +local serverity_map = { + "DiagnosticError", + "DiagnosticWarn", + "DiagnosticInfo", + "DiagnosticHint", +} +local icon_map = { + "  ", + "  ", + "  ", + "  ", +} + +local function source_string(source, code) + if code then + return string.format(" [%s %s]", source, code) + else + return string.format(" [%s]", source) + end +end + +M.line_diagnostics = function() + local bufnr, lnum = unpack(vim.fn.getcurpos()) + local diagnostics = vim.lsp.diagnostic.get_line_diagnostics(bufnr, lnum - 1, {}) + if vim.tbl_isempty(diagnostics) then + return + end + + local lines = {} + + for _, diagnostic in ipairs(diagnostics) do + table.insert( + lines, + icon_map[diagnostic.severity] + .. " " + .. diagnostic.message:gsub("\n", " ") + .. source_string(diagnostic.source, diagnostic.code) + ) + end + + local floating_bufnr, _ = vim.lsp.util.open_floating_preview(lines, "plaintext", { + border = vim.g.floating_window_border_dark, + focus_id = "line", + }) + + for i, diagnostic in ipairs(diagnostics) do + local message_length = #lines[i] - #source_string(diagnostic.source, diagnostic.code) + vim.api.nvim_buf_add_highlight(floating_bufnr, -1, serverity_map[diagnostic.severity], i - 1, 0, message_length) + vim.api.nvim_buf_add_highlight(floating_bufnr, -1, "DiagnosticSource", i - 1, message_length, -1) + end +end + +return M -- cgit v1.3-2-g11bf