机器翻译,未经母语人士审校。以英文版为准。

验证与证据在GitHub上编辑来源:docs/COVERAGE.md

行覆盖率:记录在案的测量值

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 %”,直到被更新为与这一记录一致;它现在是该测试固定的第六处。