SuperAPI AI 工具集

sg

编程与开发

查看项目

更新于 10-16 09:18

技能介绍

ast-grep(命令名 sg)是一款按 AST 结构而非文本进行代码搜索的工具。它通过可解析的代码模式配合 $VAR 元变量作为通配符来匹配代码结构,适合在需要查找代码模式或进行大规模重构时使用。

主要能力

基本搜索: ast-grep run -l ts --pattern 'console.log($X)' src/ ast-grep run --pattern '$FUNC()' agent/extensions/ # 自动检测语言

模式语法

$VAR — 匹配单个 AST 节点(仅大写:$MOD、$_)

$$$VAR — 匹配零个或多个节点(函数参数、语句)

$_VAR — 非捕获(同名可匹配不同内容)

模式必须是有效代码:import { $X } from "$Y" 可用,裸写 from $X 会失败

常见模式

查找再导出(barrel 文件): ast-grep run -l ts --pattern 'export * from "$Y"' ./ ast-grep run -l ts --pattern 'export { $$$X } from "$Y"' ./

查找来自某模块的所有导入: ast-grep run -l ts --pattern 'import { $$$X } from "$MOD"' ./

查找具有特定结构的函数调用: ast-grep run -l ts --pattern 'console.log($MSG)' ./ ast-grep run -l ts --pattern 'fetch($URL).then($H)' ./

检测反模式(Promise.all 内的 await): ast-grep run -l ts --pattern 'await $X' ./
--selector call_expression
--pattern 'Promise.all($$_)'

规则

模式必须是有效且可解析的代码 — 用 --debug-query=ast 测试

使用 $VAR(大写)作为元变量;$_VAR 用于非捕获

当模式静默失败时使用 --debug-query=ast

先在 playground 中验证复杂模式

适用场景

适用于按代码结构查找模式、批量重构、检测反模式等任务。

限制

模式必须是有效且可解析的代码,否则会失败;建议使用 --debug-query=ast 调试,并先在 playground 中验证复杂模式。