用途:ast-grep(命令 sg,也安装为 ast-grep)是 AST 感知的搜索与重写工具,覆盖 25 种语言。它把模式当作代码解析,按结构匹配,适合依赖代码形状而非文本字节的场景,例如查找所有接收 Request 参数的函数、把 console.log(x) 改写为 logger.info(x)、去除 as any 强制转换、把 require(...) 替换为 import、查找空 catch 块、迁移 Optional[X] 到 X | None、对 200 个文件应用 codemod、运行 YAML lint 规则。若问题针对字符串内容、注释、许可证头、文件名或跨语言正则,应改用 grep/rg。
主要能力:通配符为 $VAR(单个 AST 节点)和 $$$(零个或多个节点),不是正则;模式本身必须是合法代码。支持 sg run 搜索与重写、sg scan 运行 YAML 规则、sg test、sg new、sg lsp。--json=compact 输出匹配对象数组,便于 jq 处理。
使用方式:本技能提供 scripts/ast_grep_helper.py(Python 3 标准库单文件封装)以及 install.sh(POSIX)和 install.ps1(Windows)。默认入口为 helper:search 查找匹配并离线校验模式;replace 默认 dry-run,加 --apply 才写入,内部先以 --json=compact 预览、再以 --update-all 应用;scan 运行 YAML 规则,-U 应用自动修复,--report-style short 输出 CI 友好注解;validate 离线检查模式;langs、doctor、install 分别列出语言、检查二进制、委托安装。直接使用 sg 时,模式在 shell 中必须单引号包裹,避免 $VAR 被展开;--stdin 时必须显式指定 --lang。
限制与注意:--update-all 与 --json 互斥且静默,需分两遍执行;重写前务必先 dry-run;模式若需要 |、.*、\w、[a-z] 应改用 rg;Linux 上 sg 可能与 setgroups 冲突,优先用 ast-grep。资料未提供具体收费、价格或平台支持细节。