スキル一覧に戻る
aiskillstore

ast-grep-rule-crafter

by aiskillstore

ast-grep-rule-crafterは、other分野における実用的なスキルです。複雑な課題への対応力を強化し、業務効率と成果の質を改善します。

102🍴 3📅 2026年1月23日
GitHubで見るManusで実行

SKILL.md


name: ast-grep-rule-crafter description: Write AST-based code search and rewrite rules using ast-grep YAML. Create linting rules, code modernizations, and API migrations with auto-fix. Use when the user mentions ast-grep, tree-sitter patterns, code search rules, lint rules with YAML, AST matching, or code refactoring patterns.

ast-grep Rule Crafter

ast-grep uses tree-sitter to parse code into AST, enabling precise pattern matching. Rules are defined in YAML for linting, searching, and rewriting code.

Quick Start

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

Project Configuration

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

# sgconfig.yml (项目根目录)
ruleDirs:
  - rules          # 规则目录,递归加载所有 .yml 文件

典型项目结构:

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

运行项目扫描:

ast-grep scan              # 自动查找 sgconfig.yml
ast-grep scan --config path/to/sgconfig.yml  # 指定配置

注意: ast-grep scan 命令必须有 sgconfig.yml,而 ast-grep run -p 可单独使用。

Rule Workflow

Lint Rule (常见)

只检查不修复,用于 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/

Rewrite Rule (可选)

需要自动修复时添加 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. 用 CLI 探索 pattern: ast-grep -p 'pattern' src/
- [ ] 2. 创建规则文件 (.yml)
- [ ] 3. 验证: ast-grep scan -r rule.yml src/
- [ ] 4. 如有误报 → 添加 constraints → 重新验证

调试 AST 结构:

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

Essential Syntax

ElementSyntaxExample
Single node$VARconsole.log($MSG)
Multiple nodes$$$ARGSfn($$$ARGS)
Same contentUse same name$A == $A
Non-capturing$_VAR$_FN($_FN)

Core Rules Quick Reference

TypePurposeExample
patternMatch code structurepattern: if ($COND) {}
kindMatch AST node typekind: function_declaration
allMatch ALL conditionsall: [pattern: X, kind: Y]
anyMatch ANY conditionany: [pattern: var $A, pattern: let $A]
notExclude matchesnot: {pattern: safe_call()}
hasMust have childhas: {kind: return_statement}
insideMust be in ancestorinside: {kind: class_body}

Detailed References

Complete syntax guide: See references/rule-syntax.md

  • Atomic rules (pattern, kind, regex, nthChild, range)
  • Composite rules (all, any, not, matches)
  • Relational rules (has, inside, follows, precedes)
  • Transform and fixConfig

Language-specific patterns: See references/common-patterns.md

  • JavaScript/TypeScript examples
  • Python examples
  • Go and Rust examples

Supported Languages

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

スコア

総合スコア

60/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

3ヶ月以内に更新

+5
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

レビュー

💬

レビュー機能は近日公開予定です