Покрытие строк — измерение, принятое за основное
Значение «~95 % покрытия строк» на значке README, в таблице CI (непрерывной интеграции) README, на титульных страницах crates.io и PyPI (Python Package Index), на странице покрытия строк kshana.dev и в техническом отчёте — это данное измерение, округлённое до ближайшего целого процента. tests/coverage_figure_doc_sync.rs завершается неудачей, если любая из этих шести поверхностей указывает значение, отличное от записанного ниже, поэтому следующее повторное измерение изменит все их вместе или ни одну.
| Измерено | 95.35 % — 55 970 из 58 697 строк |
| Коммит | 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
затем обновите таблицу выше и шесть поверхностей в том же коммите; тест синхронизации документов назовёт все, которые вы пропустите.
История#
Значение перемерялось, а не перепечатывалось: 95,63 % на коммите b1d350d (движок 0.27.2 + невыпущенное, прогон 35934579709, 2026-09-24, 37 697 из 39 419 строк, опубликовано как ~96 %), пересмотрено до 95,35 % на 0.29.0 (выше), что округляется до ~95 %: код вырос на 19 278 измеренных строк, и новые строки покрыты немного хуже старых; 95,85 % на v0.17.0 (коммит 1daa012, 2026-06-14, опубликовано как ~96 %) и ~97 % в двух более ранних примечаниях к выпускам (CHANGELOG.md, оставлены как история). paper/kshana-technical-report.md говорил «около 97 %», пока не был приведён в соответствие с этой записью; теперь это шестая поверхность, которую фиксирует тест.