用途:ast-grep 是基于抽象语法树(AST)模式的代码搜索与改写 CLI 工具,类似语法感知的 grep/sed,适合结构化代码搜索、lint 与自动化重构。
主要能力:用 Rust 编写,处理速度快;支持 JavaScript、TypeScript、Python、Go、Rust、Java、C、C++ 等多种语言;用 AST 模式匹配而非正则;通过元变量($VAR、$$$VARS)实现自动改写;支持规则扫描(scan)生成 error/warning 信息,可用于安全缺陷、正确性缺陷与代码风格约定检查;支持 --json、--format sarif 输出,便于接入外部过滤与 CI。
安装:cargo install ast-grep;npm install -g ast-grep;或下载预编译二进制:curl -L https://github.com/ast-grep/ast-grep/releases/download/nightly/ast-grep-x86_64-unknown-linux-musl.tar.gz | tar xz
用法:运行搜索如 ast-grep run --pattern 'console.log($ARG)' --lang javascript src/ 或简写 ast-grep -p 'console.log($$$ARGS)' src/;重写如 ast-grep -p '$OBJ.val && $OBJ.val()' --rewrite '$OBJ.val?.()' src/,可加 --interactive 或 --update-all;扫描规则 ast-grep scan --rule rules/no-console.yml src/ 或 ast-grep scan --config sgconfig.yml src/。规则用 YAML 定义,包含 id、message、severity、language、rule、fix 等字段,配合 inside、has、follows、precedes、all、any、not 等关系操作符与 constraints 收窄匹配。
适用场景:结构化代码搜索、安全与正确性规则检查(如 SQL 字符串拼接注入、空 except、== None)、批量代码重构、CI 与 pre-commit 检查。建议先用已知坏样例编写并测试规则,再跑全代码库;大规模改写前先提交代码,必要时用 --interactive。
限制:纯文本搜索、格式/空白问题、简单字面量或整文件重写应使用 grep、sed 或格式化工具;PHP、Ruby、Kotlin 解析仅部分支持,Scala、Haskell 支持有限,自定义 DSL 不支持;若语言解析不佳,匹配结果可能不可靠。
未提供信息:具体收费、价格、平台、效果数据暂未提供。