From 9e63c4bb0df0657dc9c5fb86675ab1c414daf0c0 Mon Sep 17 00:00:00 2001 From: Oscar Wallberg Date: Mon, 8 Jul 2024 09:16:47 +0200 Subject: [PATCH] feat(diagnostics): add diagnostics when running :make --- lua/core/autocommands.lua | 55 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/lua/core/autocommands.lua b/lua/core/autocommands.lua index cbd4587..f6e4cf5 100644 --- a/lua/core/autocommands.lua +++ b/lua/core/autocommands.lua @@ -10,7 +10,7 @@ vim.api.nvim_create_autocmd("FileType", { desc = "Fix parsing compile errors into quickfixlist", pattern = "zig", callback = function() - vim.bo.errorformat = '%f:%l:%c: %t%.%#: %m,%-G%.%#' + vim.bo.errorformat = "%f:%l:%c: %t%.%#: %m,%-G%.%#" end, }) @@ -19,3 +19,56 @@ vim.api.nvim_create_autocmd({ "BufReadPost" }, { pattern = "*", command = 'silent! normal! g`"zv', }) + +local make_group = vim.api.nvim_create_augroup("make_diagnostics", {}) +local make_namespace = vim.api.nvim_create_namespace("make_diagnostics") +-- Create diagnostics after running :make +vim.api.nvim_create_autocmd("QuickFixCmdPost", { + callback = function(ctx) + if ctx.match ~= "make" then + return + end + + local diagnostics = vim.diagnostic.fromqflist(vim.fn.getqflist()) + local buf_diag = {} + for _, d in ipairs(diagnostics) do + if not d.bufnr then + goto continue + end + + if not buf_diag[d.bufnr] then + buf_diag[d.bufnr] = {} + end + + table.insert(buf_diag[d.bufnr], d) + + ::continue:: + end + + for bufnr, d in pairs(buf_diag) do + vim.diagnostic.set(make_namespace, bufnr, d) + end + end, + group = make_group, +}) +-- Clear old make diagnostics before running :make +vim.api.nvim_create_autocmd("QuickFixCmdPre", { + callback = function(ctx) + if ctx.match ~= "make" then + return + end + + local diagnostics = vim.diagnostic.fromqflist(vim.fn.getqflist()) + local bufs = {} + for _, d in ipairs(diagnostics) do + if d.bufnr then + table.insert(bufs, d.bufnr) + end + end + + for _, bufnr in ipairs(bufs) do + vim.diagnostic.reset(make_namespace, bufnr) + end + end, + group = make_group, +})