SuperAPI AI 工具集

coverage

智能体与模型

查看项目

更新于 10-16 05:50

技能介绍

用途:本技能说明如何在 hegel-go 项目中处理代码覆盖率,适用于覆盖率 CI 失败、为新代码编写测试、判断是否添加 // coverage-ignore 等场景。

主要能力与规则:

  • 新代码要求 100% 行覆盖;仅在极少数情况下、且获得人工许可后,才允许显式添加 coverage-ignore 注解。
  • 该要求通过棘轮机制实现:统计被标注为“无需覆盖”的行数。若排除行数超过棘轮值,或存在未覆盖行且没有 // coverage-ignore 注解,覆盖率检查即失败。
  • 棘轮不是预算。.github/coverage-ratchet.json 记录排除行数,该数值只能下降。此前工作减少了计数,并不意味着可以隐式新增未覆盖行;每次减少后棘轮立即收紧,余量随即消失。
  • 未经明确人工许可,不得添加 // coverage-ignore 注解。如果认为代码确实无法测试,第一步应是为可测试性做重构,而不是加注解;重构示例见 references/patterns.md。

编写测试:测试应捕获真实 bug,而不是复刻实现。尽量对照独立来源验证——例如与外部定义的来源比对,或用更简单但更昂贵的方法计算预期值。思考代码可能出错的方式,编写能在引入 bug 时失败的测试。

诊断覆盖率失败:CI 覆盖率失败时,读取失败输出,其中会列出每个未覆盖的文件、行号和内容,然后逐行分类:

  • 只需补测试:多数未覆盖代码只需正常编写测试,默认应假设它可直接测试。
  • 需要重构:部分代码当前形态难以测试,需要重构,参见 references/patterns.md。
  • 死代码:若确实不可达,删除它,或替换为 panic("hegel: unreachable: ...")。 本地可运行 just test 迭代,比等 CI 更快。覆盖率脚本的工作方式与自动排除内容见 references/internals.md。

限制:资料未提供具体覆盖率工具、阈值配置细节或 CI 环境要求。