Skip to content

实测改善效果

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 --markdown

Markdown 输出既包含 PR 触及位置的风险,包含复杂度差值,可以直接贴成评论。

指标basehead差值
cognitive180139-41
cyclomatic9674-22
LoC620509-111

现成的工作流见 templates/github-actions/。别忘了 fetch-depth: 0——浅克隆没有可供比较的历史。

它不回答什么

  • 它不评判这次改动。 复杂度上升不自动等于坏事:真正的新功能就是会增加分支。这个数字是给评审者的上下文,不是闸门。
  • 它只看得到可分析的文件。 非生成、非 vendored 的 .ts / .tsx
  • 它不是质量评分。 需要能让构建失败的阈值,请用 dowsing check

基于 MIT 许可发布