Add GoVet, update errorformat for issue #55

pull/59/head
ray-x 3 years ago
parent 45348a8c83
commit 64460e4f88

@ -169,6 +169,7 @@ first run of `GoFmt` may fail. It is recommended to run `GoInstallBinaries` to i
| GoTest package_path -tags=yourtags | go test packagepath -tags=yourtags |
| GoTest package_path -tags=yourtags other_args | go test packagepath -tags=yourtags other_args |
| GoLint | golangci-lint |
| GoVet | go vet |
| GoCoverage | go test -coverprofile |
Show test coverage:

@ -5,47 +5,64 @@ local log = util.log
function M.make(...)
local args = { ... }
local lines = {}
local errorlines = {}
local winnr = vim.fn.win_getid()
local bufnr = vim.api.nvim_win_get_buf(winnr)
local makeprg = vim.api.nvim_buf_get_option(bufnr, "makeprg")
local indent = "%\\%( %\\)"
if not makeprg then
log('makeprog not setup')
log("makeprog not setup")
return
end
if makeprg:find("go build") then
local efm = [[%-G#\ %.%#]]
if makeprg:find("go build") then
vim.cmd([[setl errorformat=%-G#\ %.%#]])
vim.cmd([[setl errorformat+=%-G%.%#panic:\ %m]])
vim.cmd([[setl errorformat+=%Ecan\'t\ load\ package:\ %m]])
vim.cmd([[setl errorformat+=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:%c:\ %m]])
vim.cmd([[setl errorformat+=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:\ %m]])
vim.cmd([[setl errorformat+=%C%*\\s%m]])
vim.cmd([[setl errorformat+=%-G%.%#]])
-- if makeprg:find("go build") then
efm = efm .. [[,%-G%.%#panic:\ %m]]
efm = efm .. [[,%Ecan\'t\ load\ package:\ %m]]
efm = efm .. [[,%A%\\%%\(%[%^:]%\\+:\ %\\)%\\?%f:%l:%c:\ %m]]
efm = efm .. [[,%A%\\%%\(%[%^:]%\\+:\ %\\)%\\?%f:%l:\ %m]]
efm = efm .. [[,%C%*\\s%m]]
efm = efm .. [[,%-G%.%#]]
end
-- end
if makeprg:find("golangci%-lint") then
-- lint
vim.cmd([[setl errorformat=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:%c:\ %m]])
vim.cmd([[setl errorformat+=%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:\ %m]])
efm = efm .. [[,%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:%c:\ %m]]
efm = efm .. [[,%A%\\%%(%[%^:]%\\+:\ %\\)%\\?%f:%l:\ %m]]
local pwd = vim.lsp.buf.list_workspace_folders()[1]
local cfg = pwd .. '.golangci.yml'
local cfg = pwd .. ".golangci.yml"
if util.file_exists(cfg) then
makeprg = makeprg .. [[\ -c\ ]] .. cfg
vim.api.nvim_buf_set_option(bufnr, "makeprg", makeprg)
end
end
if makeprg == "go run" and #args == 0 then
vim.cmd([[setl makeprg=go\ run\ \.]])
makeprg = makeprg .. " ."
vim.api.nvim_buf_set_option(bufnr, "makeprg", makeprg)
if makeprg:find("go run") then
log("go run")
if args == nil or #args == 0 then
makeprg = makeprg .. " ."
vim.api.nvim_buf_set_option(bufnr, "makeprg", makeprg)
end
efm = efm .. [[,%A%\\t%#%f:%l\ +0x%[0-9A-Fa-f]%\\+]]
end
if makeprg:find("go vet") then
if args == nil or #args == 0 then
makeprg = makeprg .. " ."
vim.api.nvim_buf_set_option(bufnr, "makeprg", makeprg)
end
efm = efm .. [[,%-Gexit\ status\ %\\d%\\+]]
end
if makeprg:find('test') then
log('go test')
if makeprg:find("test") then
log("go test")
-- I feel it is better to output everything
-- efm = efm .. [[,]] .. require("go.gotest").efm()
end
local arg = " "
@ -53,7 +70,7 @@ function M.make(...)
arg = arg .. " " .. v
end
if #arg then
if #arg > 0 then
makeprg = makeprg .. arg
vim.api.nvim_buf_set_option(bufnr, "makeprg", makeprg)
@ -62,28 +79,53 @@ function M.make(...)
-- vim.cmd([[make %:r]])
local cmd = vim.fn.expandcmd(makeprg)
log(cmd)
log(cmd, efm)
local function on_event(job_id, data, event)
if event == "stdout" or event == "stderr" then
log(event, data)
if event == "stdout" then
if data then
-- log('stdout', data)
vim.list_extend(lines, data)
for _, value in ipairs(data) do
if value ~= "" then
table.insert(lines, value)
end
end
end
end
if event == "exit" then
if event == "stderr" then
if data then
log("stderr", data)
for _, value in ipairs(data) do
if value ~= "" then
table.insert(errorlines, value)
end
end
end
end
log(data)
vim.fn.setqflist({}, " ", {
title = cmd,
lines = lines,
efm = vim.api.nvim_buf_get_option(bufnr, "errorformat"),
})
if event == "exit" then
if #errorlines > 0 then
if #lines > 0 then
vim.list_extend(errorlines, lines)
end
vim.fn.setqflist({}, " ", {
title = cmd,
lines = errorlines,
efm = efm,
})
elseif #lines > 0 then
vim.fn.setqflist({}, " ", {
title = cmd,
lines = lines,
})
end
vim.api.nvim_command("doautocmd QuickFixCmdPost")
end
if lines and #lines > 1 then
vim.cmd("botright copen")
end
log(lines)
log("err", errorlines)
vim.cmd("botright copen")
print(cmd .. " finished")
end
local job_id = vim.fn.jobstart(cmd, {

@ -3,6 +3,34 @@ local utils = require("go.utils")
local log = utils.log
local ginkgo = require("go.ginkgo")
M.efm = function()
local indent = [[%\\%( %\\)]]
local efm = [[%-G=== RUN %.%#]]
efm = efm .. [[,%-G" .. indent .. "%#--- PASS: %.%#]]
efm = efm .. [[,%G--- FAIL: %\\%(Example%\\)%\\@=%m (%.%#)]]
efm = efm .. [[,%G" .. indent .. "%#--- FAIL: %m (%.%#)]]
efm = efm .. [[,%A" .. indent .. "%\\+%[%^:]%\\+: %f:%l: %m]]
efm = efm .. [[,%+Gpanic: test timed out after %.%\\+]]
efm = efm .. ",%+Afatal error: %.%# [recovered]"
efm = efm .. [[,%+Afatal error: %.%#]]
efm = efm .. [[,%+Apanic: %.%#]]
-- exit
efm = efm .. ",%-Cexit status %[0-9]%\\+"
efm = efm .. ",exit status %[0-9]%\\+"
-- failed lines
efm = efm .. ",%-CFAIL%\\t%.%#"
-- compiling error
efm = efm .. ",%A%f:%l:%c: %m"
efm = efm .. ",%A%f:%l: %m"
efm = efm .. ",%-C%.%#"
efm = efm .. ",%-G%.%#"
efm = string.gsub(efm, " ", [[\ ]])
log(efm)
return efm
end
local function get_build_tags(args)
local tags = "-tags"
@ -70,9 +98,9 @@ local function run_test(path, args)
if argsstr == "" then
argsstr = "." .. utils.sep() .. "..." .. [[\ ]]
end
path = argsstr or path
path = argsstr or path
local cmd = [[setl makeprg=go\ test\ ]] .. tags .. path .. [[ | make]]
local cmd = [[setl makeprg=go\ test\ ]] .. tags .. path .. [[ | lua require"go.asyncmake".make()]]
utils.log("test cmd", cmd)
vim.cmd(cmd)
end
@ -199,6 +227,7 @@ M.test_fun = function(...)
cmd = cmd .. [[\ ]] .. argsstr
end
-- set_efm()
cmd = cmd .. [[\ ]] .. fpath .. [[ | lua require"go.asyncmake".make()]]
utils.log("test cmd", cmd)
@ -221,6 +250,7 @@ M.test_file = function(...)
if tests == nil or tests == {} then
print("no test found fallback to package test")
M.test_package(...)
return
end
local tags, args2 = get_build_tags(args)
@ -248,32 +278,6 @@ M.test_file = function(...)
argsstr = table.concat(args2 or {}, [[\ ]])
local indent = "%\\%( %\\)"
local efm = [[%-G=== RUN %.%#]]
efm = efm .. ",%-G" .. indent .. "%#--- PASS: %.%#"
efm = efm .. ",%G--- FAIL: %\\%(Example%\\)%\\@=%m (%.%#)"
efm = efm .. ",%G" .. indent .. "%#--- FAIL: %m (%.%#)"
efm = efm .. ",%A" .. indent .. "%\\+%[%^:]%\\+: %f:%l: %m"
efm = efm .. ",%A" .. indent .. "%\\+%[%^:]%\\+: %f:%l: "
efm = efm .. ",%+Gpanic: test timed out after %.%\\+"
efm = efm .. ",%+Afatal error: %.%# [recovered]"
efm = efm .. ",%+Afatal error: %.%#"
efm = efm .. ",%+Apanic: %.%#"
-- exit
efm = efm .. ",%-Cexit status %[0-9]%\\+"
efm = efm .. ",exit status %[0-9]%\\+"
-- failed lines
efm = efm .. ",%-CFAIL%\\t%.%#"
-- compiling error
efm = efm .. ",%A%f:%l:%c: %m"
efm = efm .. ",%A%f:%l: %m"
efm = efm .. "%-C%.%#"
efm = efm .. ",%-G%.%#"
vim.cmd([[setl efm=]] .. efm)
cmd = [[setl makeprg=go\ test\ ]]
.. tags
.. [[-v\ -run\ ]]
@ -282,7 +286,7 @@ M.test_file = function(...)
.. argsstr
.. [[\ ]]
.. relpath
.. [[| make]]
.. [[| lua require"go.asyncmake".make()]]
utils.log("test cmd", cmd)
vim.cmd(cmd)
end

Loading…
Cancel
Save