行覆盖率:记录在案的测量值
README徽章、README中的CI(持续集成)表、crates.io和PyPI(Python包索引)首页、kshana.dev行覆盖率页面以及技术报告中的“~95 % 行覆盖率”,都是这一测量值四舍五入到整数百分比的结果。如果这六处中有任何一处所述数字与下面记录的数字不同,tests/coverage_figure_doc_sync.rs就会失败,因此下一次重新测量会让它们同时更新,或者一处也不更新。
| 测量值 | 95.35 % — 58,697行中的55,970行 |
| 提交 | db796dd(引擎0.29.0,v0.29.0标签) |
| 运行 | GitHub Actions,ci.yml作业coverage,运行36809850252,2026-10-01 |
| 工具 | cargo tarpaulin --engine llvm(基于LLVM源码的插桩) |
| 适用范围 | src/,不含生成的数据表src/*_data.rs和精简的CLI(命令行界面)入口src/main.rs;tests/和web/不在测量范围内 |
| 制品 | 附于该次运行的coverage-lcov(lcov.info,290个源文件) |
| 下限 | 同一作业在低于85 %(--fail-under 85)时失败:该下限在每次推送时强制执行;上面的数字是记录,而不是门槛 |
命令,原样取自.github/workflows/ci.yml:
cargo tarpaulin --engine llvm --out Lcov --output-dir coverage \
--exclude-files 'src/*_data.rs' --exclude-files 'src/main.rs' \
--exclude-files 'tests/*' --exclude-files 'web/*' \
--timeout 3600 --fail-under 85
Re-measuring#
每次向main推送都会重新运行该作业,并附上新的lcov.info。要更新公布的数字,请从一次成功的运行中下载制品并求和:
gh run download <run-id> -n coverage-lcov -D /tmp/cov
awk -F: '/^LF:/{f+=$2} /^LH:/{h+=$2} END{printf "%.2f%% (%d/%d)\n", 100*h/f, h, f}' /tmp/cov/lcov.info
然后在同一次提交中更新上表和那六处;文档同步测试会指出您遗漏的任何一处。
历史#
这一数字是重新测量得出的,而不是重新键入的:提交b1d350d(引擎0.27.2加未发布内容,运行35934579709,2026-09-24,39,419行中的37,697行)上为95.63 %,公布为 ~96 %;在0.29.0(见上)上修订为95.35 %,四舍五入为 ~95 %:代码增加了19,278个被测量的行,新增行的覆盖率略低于旧行;v0.17.0(提交1daa012,2026-06-14)上为95.85 %,公布为 ~96 %;更早的两份发行说明(CHANGELOG.md,作为历史保留)中为 ~97 %。paper/kshana-technical-report.md曾写“接近97 %”,直到被更新为与这一记录一致;它现在是该测试固定的第六处。