背景与效果
在研发流程中无论是 code review 、MR 基本都绕不开 code diff 的存在,而人眼很难准确评估 diff 的影响规模。

linkediff 可以在无需编译的情况下对你的代码进行解析,指出 diff 的影响范围:

通过脑图可以看到:
- 对 UTGen.java 发生了三块变更
- 64-216 行这块影响了 methodsToCases 方法
- 这个方法调用了近 40 个方法,并被 2 个方法调用
他同时也生成易处理的 JSON 文件便于与其他系统(如 CI )配合。
使用
当前只支持 java 项目。多的不在这说了,用 docker 可以用现成的镜像一键体验,原生则稍微麻烦点
https://github.com/williamfzc/linkediff
图床比较垃圾,看不清上面的图也可以进 github 看 8
想法跟讨论点
智能 diff 功能存在我的 TODO 里很久了,之前的设计是:
- tree-sitter (这里选型有很多) 转 ast graph
- ast graph -> 更高层级的、通用 graph
- raw diff 生成
- 代入 graph 抠出整条调用上下游
而后来偶然发现了 coca ,发现已经将第二步与第四步完成了。所以趁着休息日摸鱼把这个最小可体验版本写(拼)出来了。
但这个工具肯定不是理想形态,我纠结的点有几个:
- tree-sitter 是否已经是静态分析的标准选择(我基于 antlr4 撸过一个,但性能差远了
- AST 在不同语言似乎格式也不同,转换要兼容就很麻烦
- 基于 tree-sitter 的上层工具也不算多,github 的 semantic 算一个,有点慌
- ...
最后
欢迎感兴趣的朋友一起脑暴