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

分享一下 ast-grep,结构化代码搜索工具

  •  1
     
  •   hdnvim · 350 天前 · 1646 次点击
    这是一个创建于 350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一次在 v2 发帖,给大家介绍个基于 AST 的结构化搜索工具 ast-grep

    可以用模式代码或者规则来结构化匹配代码,而不是文本。这样可以避免 grep 文本的差错。

    目前 ast-grep 支持了 C/C++, Java, JavaScript, Python, Ruby, Rust 等。可以用 npm, pip, cargo, homebrew 等方式安装。 具体安装可以参考GitHub readme

    安装完了就可以在命令行试下

    ast-grep --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
    

    这个命令在说,找到所有形如 var code = $PATTERN 的 TypeScript 代码语句,并将它们重写为 let code = new $PATTERN 的形式。其中 $PATTERN 是一个通配符,可以匹配任意的 AST 节点。类似于正则表达式中的 .,但它不是文本匹配,而是 AST 匹配。

    ast-grep 还有很多其他功能,既可以当 grep 使也可以当 linter 使,这里就不多安利了。如果 v 友们感兴趣,可以到项目主页上看看,顺便求点个小星星。

    wgq2633
        1
    wgq2633  
       350 天前
    有这样的需求,谢谢楼主,我去看看
    sillydaddy
        2
    sillydaddy  
       350 天前
    很有意思的工具,感谢楼主的分享!
    fyooo
        3
    fyooo  
       350 天前
    谢谢分享,作为这方面的外行,之前听过一个叫 semgrep 的工具,不知道应对的场景有什么不一样呢?/
    hdnvim
        4
    hdnvim  
    OP
       350 天前
    @fyooo 感谢回复! semgrep 主要做的是安全和代码审计,精准搜寻代码和重写代码的能力稍微差点。ast-grep 的话是做开发者工具的,搜索和重写更强。速度也更快。
    hdnvim
        5
    hdnvim  
    OP
       350 天前
    @wgq2633 谢谢回复! https://ast-grep.github.io/playground.html 里也有在线的 playground 可以给玩玩。
    fyooo
        6
    fyooo  
       350 天前
    @hdnvim #4 赞!看了一下官网,居然还是 Rust 开发的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3560 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.