第一次在 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 友们感兴趣,可以到项目主页上看看,顺便求点个小星星。
1
wgq2633 354 天前
有这样的需求,谢谢楼主,我去看看
|
2
sillydaddy 354 天前
很有意思的工具,感谢楼主的分享!
|
3
fyooo 354 天前
谢谢分享,作为这方面的外行,之前听过一个叫 semgrep 的工具,不知道应对的场景有什么不一样呢?/
|
4
hdnvim OP @fyooo 感谢回复! semgrep 主要做的是安全和代码审计,精准搜寻代码和重写代码的能力稍微差点。ast-grep 的话是做开发者工具的,搜索和重写更强。速度也更快。
|
5
hdnvim OP @wgq2633 谢谢回复! https://ast-grep.github.io/playground.html 里也有在线的 playground 可以给玩玩。
|