实测改善效果
hotspot 排名是一个预测:「改这里回报最大」。在你真的动手改完、并测出复杂度移动了多少之前,这个说法都还没有被验证。
dowsing diff 补上了这一环。
bash
dowsing diff origin/main📉 复杂度实测(base → head):
cognitive -41 / cyclomatic -22 / LoC -111负数表示改善。没有改善时,也照实报告。
它是怎么做的
对每个变更文件,dowsing 会在两个版本上分别读取源码——直接从 git 读,而不是读工作区——各自解析后相减。
这带来一个有用的结果:它不关心是谁做的改动。手写的提交、代理的重构、自动化 codemod、CI 里的 PR,测量方式完全一样。没有需要开启的开关,也不调用任何模型。
dowsing 不负责改代码
早期版本有一个 dowsing fix,把修改委托给 Claude Code,验证之后再测量差值。它确实能跑通——但通常的调用链是 代理 → dowsing,让 dowsing 在这条链里再启动一个代理,是把关系颠倒了。外层代理拥有对话上下文、评审循环和用户,做这个改动的位置好得多。
于是「改」被删掉,「测」被保留。作为交换,测量变得更便宜也更频繁:现在每个 PR 都会跑,而不只是 dowsing 自己引发的改动。
在 Pull Request 中
bash
dowsing diff origin/main --markdownMarkdown 输出既包含 PR 触及位置的风险,也包含复杂度差值,可以直接贴成评论。
| 指标 | base | head | 差值 |
|---|---|---|---|
| cognitive | 180 | 139 | -41 |
| cyclomatic | 96 | 74 | -22 |
| LoC | 620 | 509 | -111 |
现成的工作流见 templates/github-actions/。别忘了 fetch-depth: 0——浅克隆没有可供比较的历史。
它不回答什么
- 它不评判这次改动。 复杂度上升不自动等于坏事:真正的新功能就是会增加分支。这个数字是给评审者的上下文,不是闸门。
- 它只看得到可分析的文件。 非生成、非 vendored 的
.ts/.tsx。 - 它不是质量评分。 需要能让构建失败的阈值,请用
dowsing check。