可以用模式代码或者规则来结构化匹配代码,而不是文本。这样可以避免 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 友们感兴趣,可以到项目主页上看看,顺便求点个小星星。