SuperAPI AI 工具集

ast-grep

编程与开发

查看项目

更新于 10-15 21:37

技能介绍

用途:ast-grep 是结构化代码搜索与重写工具,适合按代码的 AST 结构(而非纯文本)查找或修改代码,例如搜索函数调用、导入、特定语法构造,系统性重构,或查找弃用模式与反模式。若只需匹配字面字符串、注释或文档,用 grep/ripgrep 即可。

主要能力:可用模式或规则(rule)搜索与重写;支持语言参数(如 js、nextflow)。快速参考:查找模式用 ast-grep run --pattern 'PATTERN' --lang LANG;按规则扫描用 ast-grep scan --rule file.yaml;调试 AST 用 --debug-query=ast;测试模式匹配用 --debug-query=pattern;内联规则用 --inline-rules 'YAML'。Nextflow 中元变量用 _ 而非 $。

核心概念:元变量 $VAR 匹配单个命名节点(如 console.$METHOD 可匹配 console.log);$$VAR 匹配单个节点(含匿名,如运算符);$$$VAR 匹配零个或多个节点(如 func($$$ARGS) 匹配任意参数);_ 前缀为非捕获式元变量(Nextflow)。规则结构包含 id、language、severity、message、note、rule;可用 fix 字段实现自动重写,配合 --update-all 应用改动。

用法:先写简单模式,再用 --debug-query=ast 检查 AST 结构;关系规则(inside、has、precedes、follows)务必加 stopBy: end 以搜索完整子树;在 bash 中注意转义 $,优先用单引号,复杂模式用规则文件或 --inline-rules。可组合 all、has、not 等约束表达复杂条件。

适用场景:Nextflow 管道中查找弃用的 Channel.from() 并替换为 Channel.of();将 console.log 批量改写为自定义 logger;为代码库编写自定义 lint 规则;查找使用 useState 但缺少 useEffect 清理的组件。该仓库还提供 nf-ast-grep MCP 工具用于 Nextflow 专用搜索,如 nf-ast-grep_find_processes、find_workflows、find_channels、find_deprecated、lint、search。

限制:语言支持取决于安装与配置,自定义语言(如 Nextflow)需在 sgconfig.yml 中配置 customLanguages;不支持的语言会报错。安装方式:cargo install ast-grep,或 npm install -g @ast-grep/cli,或 nix shell nixpkgs#ast-grep。规则文件需为合法 YAML,路径错误或缩进问题会导致失败。大型搜索可使用 explore 智能体,简单模式可直接运行 ast-grep。