V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
williamfzc
V2EX  ›  分享创造

一个简单分析 diff 上下游调用的小工具/想法

  •  1
     
  •   williamfzc · 2022-06-08 22:55:14 +08:00 · 1547 次点击
    这是一个创建于 892 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景与效果

    在研发流程中无论是 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 算一个,有点慌
    • ...

    最后

    欢迎感兴趣的朋友一起脑暴

    4 条回复    2022-06-10 10:22:26 +08:00
    pkwenda
        1
    pkwenda  
       2022-06-09 17:13:22 +08:00
    有脑洞,但是我个人就是要看上下文才知道影响范围。项目太大,方法名称记不住
    williamfzc
        2
    williamfzc  
    OP
       2022-06-09 17:42:30 +08:00
    @pkwenda 了解,我设想的场景可能是给 review 者大概感知下哪块是需要重点看的
    hackpro
        3
    hackpro  
       2022-06-10 02:42:26 +08:00 via iPhone
    这个牛
    请教下原理是静态语意分析按调用关系确定影响范围吗?
    williamfzc
        4
    williamfzc  
    OP
       2022-06-10 10:22:26 +08:00
    @hackpro 是的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.