用途:在陌生代码库中导航,追踪调用流或符号定义,按名称或模式查找文件,以及在重构前定位所有引用。
主要能力与工具选择:结构性模式(函数、类)用 sg(ast-grep);文本或正则模式(字符串、名称)用 rg(ripgrep);按名称或扩展名发现文件用 fd。决策流程:先找文件则 fd 管道给 rg/sg;需要语法感知匹配用 sg;快速文本搜索用 rg;不确定时先用 rg,结构重要时升级到 sg。
ast-grep 要点:命令形式为 sg -p 'PATTERN' -l LANG [PATH],可用 --has 'INNER'(必须包含)、--not-has 'INNER'(必须不包含)、--inside 'OUTER'(必须位于其中)。元变量:$VAR 捕获单个节点,$$$VAR 捕获零个或多个节点,$_ 为非捕获。规则:元变量必须大写,同名表示相同内容($A == $A 匹配 x == x 而非 x == y)。示例:sg -p 'function $NAME($$$ARGS) { $$$ }' -l js;sg -p 'async function $NAME($$$) { $$$ }' --has 'await $EXPR' -l js;sg -p 'class $NAME extends $PARENT { $$$ }' -l ts;sg -p 'def $NAME($$$): $$$' -l py。
ripgrep 与 fd 速查:rg PATTERN -t TYPE [PATH] 按文件类型搜索;rg -F 'LITERAL' -t TYPE 固定字符串;rg PATTERN -l 仅列出匹配文件;rg PATTERN -C 3 带上下文行。fd -e EXT [PATH] 按扩展名查找;fd PATTERN [PATH] 按名称正则查找;fd -e py | xargs rg 'pattern' 将 fd 管道给 rg。
性能建议:先缩小范围,如 fd -e py src/ | xargs rg 'class.*Test';始终使用类型过滤,如 rg PATTERN -t rust、sg -p 'PATTERN' -l rs;排除产物,如 rg PATTERN -g '!node_modules' -g '!dist'。
限制:资料未提供安装方式、支持语言清单、版本要求及具体平台差异,使用前需自行确认工具可用性。