用途:使用 ast-grep 进行结构化代码搜索与重构,按 AST(抽象语法树)匹配代码,而非文本模式。当搜索模式依赖代码结构(函数形态、调用形式、参数数量)、需跨多文件重构 API 调用点并保留捕获变量、或为特定代码库构建新 ast-grep 规则时使用;纯文本/正则搜索、一次性反模式扫描报告、已知文件的功能重构、查看 linter 参数等场景应改用其他工具。判断规则:若模式含"任意表达式/任意参数/任意函数名"通配符,用 ast-grep。
主要能力:模式语法中 $VAR 匹配单个 AST 节点,$$$ARGS 匹配零个或多个节点,$_ 匹配单节点但不捕获,$A == $A 要求同一节点重复(如找出 x == x)。支持按语言搜索与替换,语言代码包括 js、ts、jsx、tsx、py、rs、go、java、cpp、c、rb、php。可检测空 catch 块、eval、innerHTML、不安全块、危险 shell 调用等。
使用方式:搜索示例 ast-grep -p 'console.log($$$)' --lang js;替换预览 ast-grep -p 'var $V = $X' -r 'const $V = $X' --lang js,加 -U 应用到所有文件,加 -i 交互式逐项审查。常用参数 -p 模式、-r 重写、-l 语言、-i 交互、-U 全部更新、--json 输出、-A/-B/-C 上下文行、--debug-query 调试解析。可复用规则使用扫描模式:ast-grep scan -c sgconfig.yml,ast-grep new project my-linter 初始化规则项目,规则文件以 YAML 定义 id、language、severity、message、rule、fix。
适用场景:迁移弃用 API、重命名跨文件函数、移除 console.log、require 转 import、为 await 添加错误处理、查找 React hooks、async 函数、类型断言、装饰器函数、goroutine、defer 等结构。
限制:资料未提供安装步骤、具体版本要求、性能数据及错误处理细节;YAML 规则的完整语法、约束、变换与测试需参考 REFERENCE.md。处理日志、文档、配置或语言无关的简单匹配时,应改用文本搜索工具。