mcpField
T
tool-ast-grep-rules

tool-ast-grep-rules

github.com/heyvhuang开发33865 次安装30 周前更新
代码仓库

关于 tool-ast-grep-rules

面向开发者的 ast-grep 技能,用于编写和验证 YAML 规则,以结构化方式搜索、检查或重写代码。内容涵盖规则语法、项目配置和验证流程。

主要功能

  1. 01编写结构匹配 YAML 规则
  2. 02配置检查与重写规则
  3. 03使用 sgconfig.yml 扫描项目
  4. 04调试 AST 查询
  5. 05查看多种语言示例

适用场景

  1. 01为代码模式创建检查规则
  2. 02自动应用代码重写
  3. 03对项目源码验证规则
  4. 04调试时检查 AST 结构

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/heyvhuang/ship-faster --skill tool-ast-grep-rules

安装后在 Claude Code 中输入/tool-ast-grep-rules确认已加载。

附带文件common-patterns.mdrule-syntax.md

详细介绍

ast-grep 规则编写器

ast-grep 使用 tree-sitter 将代码解析为 AST,从而实现精准的模式匹配。规则以 YAML 定义,用于检查、搜索和重写代码。

快速开始

id: no-console-log
language: JavaScript
rule:
  pattern: console.log($$$ARGS)
fix: logger.log($$$ARGS)
message: Replace console.log with logger

项目配置

项目级扫描需要一个 sgconfig.yml 配置文件:

# sgconfig.yml (project root)
ruleDirs:
  - rules          # Rule directory, recursively loads all .yml files

典型的项目结构:

my-project/
├── sgconfig.yml
├── rules/
│   ├── no-console.yml
│   └── custom/
│       └── team-rules.yml
└── src/

运行项目扫描:

ast-grep scan              # Automatically finds sgconfig.yml
ast-grep scan --config path/to/sgconfig.yml  # Specify config

注意:ast-grep scan 命令需要 sgconfig.yml,而 ast-grep run -p 可以独立使用。

规则工作流

检查规则(常用)

只检查,不修复,用于 CI/编辑器提示:

# rules/no-console-log.yml
id: no-console-log
language: JavaScript
severity: warning
message: Avoid console.log in production code
rule:
  pattern: console.log($$$ARGS)

验证:

ast-grep scan -r rules/no-console-log.yml src/
重写规则(可选)

需要自动修复时,添加 fix:

id: no-console-log
language: JavaScript
severity: warning
message: Replace console.log with logger
rule:
  pattern: console.log($$$ARGS)
fix: logger.log($$$ARGS)

应用修复:

ast-grep scan -r rules/no-console-log.yml --update-all src/
开发工作流
- [ ] 1. Explore pattern with CLI: ast-grep -p 'pattern' src/
- [ ] 2. Create rule file (.yml)
- [ ] 3. Verify: ast-grep scan -r rule.yml src/
- [ ] 4. If false positives → add constraints → re-verify

调试 AST 结构:

ast-grep -p 'console.log($ARG)' --debug-query ast

基本语法

元素语法示例
单个节点$VARconsole.log($MSG)
多个节点$$$ARGSfn($$$ARGS)
相同内容使用相同名称$A == $A
不捕获$_VAR$_FN($_FN)

核心规则速查

类型用途示例
pattern匹配代码结构pattern: if ($COND) {}
kind匹配 AST 节点类型kind: function_declaration
all匹配所有条件all: [pattern: X, kind: Y]
any匹配任一条件any: [pattern: var $A, pattern: let $A]
not排除匹配项not: {pattern: safe_call()}
has必须包含子节点has: {kind: return_statement}
inside必须位于祖先节点内inside: {kind: class_body}

详细参考

完整语法指南:参见 rule-syntax.md

  • 原子规则(pattern、kind、regex、nthChild、range)
  • 组合规则(all、any、not、matches)
  • 关系规则(has、inside、follows、precedes)
  • Transform 和 fixConfig

特定语言的模式:参见 common-patterns.md

  • JavaScript/TypeScript 示例
  • Python 示例
  • Go 和 Rust 示例

支持的语言

Bash、C、Cpp、CSharp、Css、Elixir、Go、Haskell、Hcl、Html、Java、JavaScript、Json、Kotlin、Lua、Nix、Php、Python、Ruby、Rust、Scala、Solidity、Swift、Tsx、TypeScript、Yaml

评论

支持 Markdown