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

127 天前
 hdnvim

第一次在 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 友们感兴趣,可以到项目主页上看看,顺便求点个小星星。

1311 次点击
所在节点    分享创造
6 条回复
wgq2633
127 天前
有这样的需求,谢谢楼主,我去看看
sillydaddy
127 天前
很有意思的工具,感谢楼主的分享!
fyooo
127 天前
谢谢分享,作为这方面的外行,之前听过一个叫 semgrep 的工具,不知道应对的场景有什么不一样呢?/
hdnvim
127 天前
@fyooo 感谢回复! semgrep 主要做的是安全和代码审计,精准搜寻代码和重写代码的能力稍微差点。ast-grep 的话是做开发者工具的,搜索和重写更强。速度也更快。
hdnvim
127 天前
@wgq2633 谢谢回复! https://ast-grep.github.io/playground.html 里也有在线的 playground 可以给玩玩。
fyooo
127 天前
@hdnvim #4 赞!看了一下官网,居然还是 Rust 开发的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1006506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX