ast-grep规则编写最佳实践Skill ast-grep

本技能提供 ast-grep 规则编写和使用的全面最佳实践指南,帮助开发者高效进行代码搜索、linting 和转换,适用于编写、审查和调试代码分析规则。关键词:ast-grep, 代码搜索, linting, 代码转换, YAML规则, 模式语法, 元变量, 约束, 代码重写, 最佳实践。

测试 0 次安装 0 次浏览 更新于 3/18/2026

name: ast-grep description: ast-grep 规则编写和使用的最佳实践。该技能应用于编写、审查或调试 ast-grep 规则,用于代码搜索、linting 和转换。触发涉及 YAML 规则、模式语法、元变量、约束或代码重写的任务。

ast-grep 社区最佳实践

全面的 ast-grep 规则编写和使用最佳实践指南,由 ast-grep 社区维护。包含 8 个类别中的 46 条规则,按影响优先级排序,以指导自动化规则生成和代码转换。

何时应用

在以下情况下参考这些指南:

  • 编写新的 ast-grep 规则用于 linting 或搜索
  • 调试不匹配预期代码的模式
  • 为大型代码库优化规则性能
  • 设置具有适当组织的 ast-grep 项目
  • 审查 ast-grep 规则的正确性和可维护性

通用工作流

在创建 ast-grep 规则进行代码搜索时,遵循此工作流:

步骤 1: 理解查询

澄清你想要找到的内容:

  • 目标编程语言
  • 需要处理的边缘情况
  • 包括与排除的内容

步骤 2: 创建示例代码

编写代表所需匹配模式的示例代码片段。

步骤 3: 编写 ast-grep 规则

选择正确的方法:

  • 使用 pattern 用于简单结构
  • 使用 kind 配合 has/inside 用于复杂结构
  • 结合 allanynot 用于复合查询
  • 始终对关系规则(insidehas)使用 stopBy: end,以确保完整搜索

步骤 4: 测试规则

# 检查 AST 结构
ast-grep run --pattern '[code]' --lang [language] --debug-query=ast

# 测试内联规则
echo "[code]" | ast-grep scan --inline-rules "[rule]" --stdin

# 从文件测试
ast-grep scan --rule [file.yml] [path]

步骤 5: 搜索代码库

部署已验证的规则:

# 使用模式搜索(简单匹配)
ast-grep run --pattern '[pattern]' --lang [language] [path]

# 使用规则文件搜索(复杂查询)
ast-grep scan --rule [file.yml] [path]

# 交互式应用修复
ast-grep scan --rule [file.yml] --interactive [path]

快速提示

  1. 始终使用 stopBy: end - 确保关系规则的完整子树遍历
  2. 从简单开始,增加复杂性 - 从模式开始,逐步到种类,再到关系规则
  3. 使用 AST 检查调试 - 使用 --debug-query=ast 验证结构匹配
  4. 在内联规则中转义 - 使用 \$VAR 或单引号用于 shell 命令
  5. 首先在游乐场测试 - 使用 https://ast-grep.github.io/playground.html 进行快速迭代

按优先级排序的规则类别

优先级 类别 影响 前缀
1 模式正确性 关键 pattern-
2 元变量使用 关键 meta-
3 规则组合 compose-
4 约束设计 const-
5 重写正确性 中高 rewrite-
6 项目组织 org-
7 性能优化 perf-
8 测试与调试 低中 test-

快速参考

1. 模式正确性(关键)

2. 元变量使用(关键)

3. 规则组合(高)

4. 约束设计(高)

5. 重写正确性(中高)

6. 项目组织(中)

7. 性能优化(中)

8. 测试与调试(低中)

如何使用

阅读单独的参考文件以获取详细解释和代码示例:

完整编译文档

  • AGENTS.md - 包含所有规则的完整编译指南

参考文件

文件 描述
AGENTS.md 包含所有规则的完整编译指南
references/_sections.md 类别定义和排序
assets/templates/_template.md 新规则的模板
metadata.json 版本和参考信息