用途:检查未暂存改动(unstaged changes)的测试覆盖率,适用于用户要求“check coverage”“/coverage”,或想查看哪些未暂存改动缺少测试覆盖的场景。
主要能力:先用 git diff 获取未暂存文件名,并用 git diff -U0 --no-color 获取改动行号;随后顺序执行 npm run test:ci(vitest 并生成覆盖率)与 npm run coverage:report(生成 lcov/text 报告);再借助 scripts/parse-lcov.py 解析 coverage/lcov.info 并映射到改动行,报告未覆盖行,格式为 file.ts:42,并在 stderr 汇总 X/Y changed lines covered。
使用方式:并行运行 git diff --name-only 与 git diff -U0 --no-color;顺序运行 npm run test:ci、npm run coverage:report;把 diff 保存到临时文件后执行 git diff -U0 --no-color > /tmp/changes.diff 与 python3 scripts/parse-lcov.py --lcov coverage/lcov.info --diff /tmp/changes.diff。
LCOV 解析:读取 coverage/lcov.info,字段 SF: 为源文件路径,DA:line,hits 中 0 表示未覆盖、大于 0 表示已覆盖,end_of_record 表示文件段结束;将 SF: 路径与 git diff 文件匹配,逐行检查改动行,hits 为 0 即报告为未覆盖。
规则与限制:只分析未暂存改动;命令须顺序执行;忽略没有覆盖率数据的文件(非代码文件);不追求 100% 覆盖,只检查改动行是否被覆盖。
错误处理:npm run test:ci 失败则报告测试失败并停止;找不到 coverage/lcov.info 时确认 test runner 配置的 coverage.reporter 包含 lcov;git diff 无改动则报告没有未暂存改动可检查。