用途:该技能帮助把自然语言查询转换为 ast-grep 规则,用 AST 模式按代码结构而非纯文本进行结构化搜索,适用于大型代码库的精确检索。
主要能力:支持查找特定语言结构(如带特定参数的函数调用)、按 AST 特征搜索、以及传统文本搜索难以处理的复杂代码查询,例如“找出所有没有错误处理的 async 函数”。
使用方式:遵循理解查询、编写示例代码、编写规则、测试规则、搜索代码库的流程。规则中关系型规则(inside、has)应使用 stopBy: end 确保遍历到方向末尾。简单结构用 pattern,复杂结构用 kind 配合 has/inside,复合查询用 all、any、not 拆分。测试可用内联规则(--inline-rules 配合 --stdin)或规则文件(--rule 配合 scan)。搜索用 run --pattern(简单单节点)或 scan --rule(复杂规则)。可用 --debug-query=cst/ast/pattern 查看 AST 结构辅助调试,--json 输出结构化结果。内联规则中元变量需转义,如 $VAR 或使用单引号。
适用场景:需要按代码结构搜索、定位特定语言构造、查找符合特定 AST 特征或缺失预期模式的代码等。
限制:需先明确目标模式、编程语言、边界情况与匹配范围。规则不匹配时可简化规则、补 stopBy: end、检查 kind 是否正确。详细规则语法见 references/rule_reference.md。