V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
williamfzc

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

  •  1
     
  •   williamfzc · Jun 8, 2022 · 2045 views
    This topic created in 1418 days ago, the information mentioned may be changed or developed.

    背景与效果

    在研发流程中无论是 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 replies    2022-06-10 10:22:26 +08:00
    pkwenda
        1
    pkwenda  
       Jun 9, 2022
    有脑洞,但是我个人就是要看上下文才知道影响范围。项目太大,方法名称记不住
    williamfzc
        2
    williamfzc  
    OP
       Jun 9, 2022
    @pkwenda 了解,我设想的场景可能是给 review 者大概感知下哪块是需要重点看的
    hackpro
        3
    hackpro  
       Jun 10, 2022 via iPhone
    这个牛
    请教下原理是静态语意分析按调用关系确定影响范围吗?
    williamfzc
        4
    williamfzc  
    OP
       Jun 10, 2022
    @hackpro 是的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3422 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 12:17 · PVG 20:17 · LAX 05:17 · JFK 08:17
    ♥ Do have faith in what you're doing.