linked graph for diff
MIT License
该项目转由 opensibyl 社区统一继续开发。
linked graph for diff
在研发流程中无论是 code review、MR 基本都绕不开 code diff 的存在,而人眼很难准确评估 diff 的影响规模。
linkediff 可以在无需编译的情况下对你的代码进行解析,指出diff的影响范围:
通过脑图可以看到:
他同时也生成易处理的JSON文件便于与其他系统(如CI)配合。
{
"sibyl-core/src/main/java/com/williamfzc/sibyl/core/listener/java8/Java8MethodListener.java": [
{
"start": 9,
"end": 15,
"affected_functions": [
{
"Name": "enterClassDeclaration",
"ReturnType": "void",
"MultipleReturns": null,
"Parameters": [
{
"Modifiers": null,
"ParamName": "",
"TypeValue": "ctx",
"TypeType": "Java8Parser.ClassDeclarationContext",
"ReturnTypes": null,
"Parameters": null
}
],
"FunctionCalls": [
{
"Package": "com.williamfzc.sibyl.core.listener",
"Type": "chain",
"NodeName": "Java8Parser.ClassDeclarationContext",
"FunctionName": "normalClassDeclaration",
"Parameters": null,
"Position": {
"StartLine": 55,
"StartLinePosition": 20,
"StopLine": 55,
"StopLinePosition": 42
}
}
...
]
}
...
]
}
...
]
}
当前只支持java项目。
git clone https://github.com/jacoco/jacoco
cd jacoco
docker run --rm -v `pwd`:/usr/src/app williamfzc/linkediff:v0.2.1 linkediff run
你需要安装 Python3 及 coca。
pip3 install linkediff
linkediff init
你会在你的项目目录下看到 .linkediff.json
配置文件,将其中 coca_cmd 指向 coca可执行文件 的路径即可。
linkediff run
在运行完成后你可以看到一些结果文件,如 ldresult.json
, ldresult.xmind
。结合自身需要进一步处理即可。
由于xmind没有官方sdk,生成的xmind文件只能使用xmind8打开,详见 #1 。
可以参考 github actions 中是如何做的:传送门。
智能diff功能存在我的TODO里很久了,之前的设计是:
而后来偶然发现了 coca ,发现已经将第二步与第四步完成了。所以趁着休息日摸鱼把这个最小可体验版本写(拼)出来了。
这个版本可能只会被用于验证价值与试水,如果有一定使用场景再考虑具体选型与适配。当前版本自由参与,结构也非常简单,欢迎PR但请不要花费太多时间。欢迎各类建议。
目前的性能不是理想状态,因为只是简单粘到一起。选型并没有真正定下来,所以暂时不会在性能上做过多优化。不过也处于一个能用的状态,基本满足CI的需求。