1 个不稳定版本
0.1.1 | 2021 年 7 月 8 日 |
---|
#2190 在 开发工具
38KB
824 行
cosmoline
这是什么?
Cosmoline 是一个为 Rust 生成快速代码覆盖率报告的工具。它利用了 2020 年 11 月在 nightly 中引入的基于源代码的覆盖率。
它是如何工作的?
输入:来自 llvm-cov export
(或其便利的包装 cargo cov
)的 JSON
输出:使用 handlebars-rs
渲染的精美 HTML 报告。模板位于 template 目录中,并编译到 cosmoline
二进制文件中。
如何使用它?
安装先决条件
有关如何在 Rust Unstable Book 中配置 nightly 以生成分析数据的说明。
安装 jq
(有用,但不是必需的)
例如在 macOS 上
brew install jq
或 Debian
sudo apt-get install jq
或 FreeBSD
sudo pkg install jq
构建和安装 cosmoline
# Check out this repo
git clone https://github.com/inferiorhumanorgans/cosmoline
# Install it with cargo
cargo +nightly install --path ./cosmoline
导出 JSON 覆盖率数据
使用 jq
从 llvm
为单个库
# Back in the directory for our own project
cd /path/to/my-app
export OUT_DIR="$(PWD)/coverage-report"
export APP_NAME="my-app"
# Run tests, save results as JUnit data
LLVM_PROFILE_FILE="${OUT_DIR}/${APP_NAME}-%m.profraw" RUSTFLAGS="-Z instrument-coverage" cargo +nightly test --lib -- -Z unstable-options --format=junit > ${OUT_DIR}/junit.xml
# Grab test executable
COV_EXEC=$(RUSTFLAGS="-Z instrument-coverage" cargo +nightly test --message-format=json --lib --no-run | jq -r "select(.profile.test == true) | .filenames[]" | head -1)
# Merge sparse files
cargo +nightly profdata -- merge --sparse "${OUT_DIR}/${APP_NAME}-"*.profraw -o "${OUT_DIR}/${APP_NAME}.profdata"
# Extract JSON formatted details
cargo +nightly cov -- export "${COV_EXEC}" -instr-profile="${OUT_DIR}/${APP_NAME}.profdata" > "${OUT_DIR}/${APP_NAME}.coverage.json"
将其传递给 cosmoline
cosmoline --input "${OUT_DIR}/${APP_NAME}.coverage.json" --source-directory "$(PWD)" --output-directory "${OUT_DIR}/report"
生成的报告是自包含的,并将放置在 ${OUT_DIR}/report/index.html
中。
查看结果
一个典型的报告可能看起来像这样
请注意,列出的百分比将根据文件被覆盖的比例以红色、黄色或绿色着色。
单击文件名将带您到该文件内容的注解渲染
已配置的程序代码,如果未执行,将以红色突出显示,如果已执行,则以绿色突出显示。未配置的代码保持白色。
待办事项
- 渲染 clippy 警告?
- 重构 CSS
- 包含 cargo 和 git 元数据
依赖关系
~7-17MB
~217K SLoC