用途:本指南说明如何把 ast-grep 作为项目级 lint 工具使用,用结构化 AST 模式补足 ESLint、oxlint、Biome、clippy 等通用 linter 无法表达的规则,并强调优先使用可复现的静态规则而非自然语言提示。
主要能力:支持 sgconfig.yml 配置(ruleDirs、testConfigs、utilDirs、languageGlobs)、规则 YAML(id、language、rule、severity、message、note、fix、constraints、transform、files、ignores、url)、fix 自动修正与 expandEnd 范围扩展、constraints 元变量约束、transform 的 replace/substring/convert/rewrite、utils 共享规则、分类测试与快照测试、CI 集成与退出码控制。
使用方式:安装可用 npm install -D @ast-grep/cli、cargo install ast-grep --locked 或 brew install ast-grep;按项目 packageManager 选择包管理器并保持 CI 一致。最小配置为 sgconfig.yml 指定 ruleDirs 与 testConfigs,规则放入 rules/,测试放入 rule-tests/。常用命令:ast-grep test --skip-snapshot-tests、ast-grep test -U、ast-grep scan src/、ast-grep scan --error、ast-grep run --pattern ... --rewrite ... --lang typescript .。
适用场景:禁止特定函数调用模式、deprecated API 检测与自动改写、特定上下文内的禁止模式、项目专有结构约束;当规则依赖 AST 父子或兄弟关系、需要自动迁移时使用。
限制:fix 可能改变语义,类型安全、副作用、求值顺序或替换不唯一时不应自动修正;$OBJ.$PROP 只匹配点访问,$VAR 匹配单个节点,$$$VARS 匹配零个或多个节点,元变量须占满整个节点;kind 名依赖 Tree-sitter grammar;not 内带约束的元变量可能不按预期工作。其余细节暂未提供。