preview.nvim/lua/render/diagnostic.lua
2026-03-01 17:22:59 -05:00

40 lines
1 KiB
Lua

local M = {}
local log = require('render.log')
local ns = vim.api.nvim_create_namespace('render')
---@param bufnr integer
function M.clear(bufnr)
vim.diagnostic.set(ns, bufnr, {})
log.dbg('cleared diagnostics for buffer %d', bufnr)
end
---@param bufnr integer
---@param name string
---@param error_parser fun(stderr: string, ctx: render.Context): vim.Diagnostic[]
---@param stderr string
---@param ctx render.Context
function M.set(bufnr, name, error_parser, stderr, ctx)
local ok, diagnostics = pcall(error_parser, stderr, ctx)
if not ok then
log.dbg('error_parser for "%s" failed: %s', name, diagnostics)
return
end
if not diagnostics or #diagnostics == 0 then
log.dbg('error_parser for "%s" returned no diagnostics', name)
return
end
for _, d in ipairs(diagnostics) do
d.source = d.source or name
end
vim.diagnostic.set(ns, bufnr, diagnostics)
log.dbg('set %d diagnostics for buffer %d from provider "%s"', #diagnostics, bufnr, name)
end
---@return integer
function M.get_namespace()
return ns
end
return M