SuperAPI AI 工具集

ast-grep

通用与其它

查看项目

更新于 10-15 20:13

技能介绍

ast-grep(命令名 sg,也安装为 ast-grep)是一款跨 25 种语言的 AST 感知搜索与重写工具。它把模式当作代码解析,与解析项目的方式一致,因此按结构匹配;当问题取决于代码形状而非文本字节时适用。

用途与场景:查找所有带某类参数的函数、重写 console.log(x) 为 logger.info(x)、去除 as any 强制转换、把 require(...) 替换为 import、查找空 catch 块、迁移 Optional[X] 为 X | None、在多文件应用 codemod、运行 YAML 规则并报告违规。若目标是文本(字符串内容、注释、许可证头、文件名、跨语言正则),应改用 grep/rg。

主要能力:通配符 $VAR(单个 AST 节点)与 $$$(零或多个节点);注意它并非正则,foo|bar、.*foo、\w+、[a-z] 等语法会静默失败。模式本身必须是可解析的合法代码。工具支持 --json 输出、YAML 规则、自动修复、--stdin 与调试查询。注意 --update-all 与 --json 互斥(静默),需分两趟执行预览与写入。

使用方式:技能提供 Python3 标准库封装脚本 scripts/ast_grep_helper.py 及平台安装脚本 install.sh(POSIX)、install.ps1(Windows)。子命令包括 search、replace(默认 dry-run,需 --apply 才写入)、scan、validate、langs、doctor、install,另有 new、test 代理到 sg。示例:python3 scripts/ast_grep_helper.py search 'console.log($MSG)' --lang ts src/;replace 加 --apply 才会修改文件。直接调用 sg 时可参考 sg run、sg scan 等命令;shell 中模式务必用单引号,避免 $VAR 被展开。

限制与注意:改写前必须先 dry-run;模式需要 |、.*、\w、[a-z] 时应改用 rg;--stdin 时必须显式指定 --lang;Linux 上 sg 可能与 setgroups 冲突,优先用 ast-grep。资料未提供收费、价格与平台支持细节。