You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从GHC/Cabal/Stack获取错误与警告的准确计数?

解决Stack/GHC构建时准确统计错误与警告数量的Bash方案

GHC的错误和警告输出遵循固定格式,我们可以通过匹配该格式来避免文件名含"error"/"warning"导致的假阳性统计,以下是两种可行的Bash实现方式:

直接命令行执行

无需编写脚本,直接在终端运行以下命令即可实时统计:

stack build 2>&1 | tee build.log | awk '/^.*:[0-9]+(:[0-9]+)?: (error|warning):/ {count[$NF]++} END {print "Errors: " count["error:"]+0 ", Warnings: " count["warning:"]+0}'

参数说明:

  • 2>&1:将Stack构建的标准错误输出重定向到标准输出,确保错误和警告信息能被后续命令捕获
  • tee build.log:同时将构建输出保存到build.log文件,方便事后排查
  • awk逻辑:匹配GHC标准的错误/警告行格式(文件路径:行号(:列号): error:或文件路径:行号(:列号): warning:),分别统计两类信息的数量,最后输出结果

可复用脚本

如果需要频繁使用,可以编写一个可执行脚本:

  1. 创建文件count-ghc-issues.sh并写入以下内容:
#!/bin/bash

# 执行Stack构建,捕获输出并统计错误/警告
stack build 2>&1 | tee build.log | awk '
    /^.*:[0-9]+(:[0-9]+)?: (error|warning):/ {
        if ($NF == "error:") {
            errors++
        } else if ($NF == "warning:") {
            warnings++
        }
    }
    END {
        printf "Build finished: %d errors, %d warnings\n", errors+0, warnings+0
    }'
  1. 赋予脚本执行权限:
chmod +x count-ghc-issues.sh
  1. 运行脚本:
./count-ghc-issues.sh

核心原理

该方案通过正则匹配GHC输出的结构化错误/警告行,只有当行内容符合[文件路径]:[行号](:[列号]): [error/warning]:的格式时才会被统计,彻底规避了文件名或代码中含"error"/"warning"字样导致的假阳性问题。

内容的提问来源于stack exchange,提问作者Peter Bergman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:15:17