Agent Skills
返回列表
💻

GritQL 结构化代码迁移

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md 安装 @user_3c6cb52e/search-and-rewrite-code-with-structural-gritql-patterns-before-broad-migrations 到 AI 助手中。

技能介绍

为什么要放弃正则和手工改动

做大规模迁移——API 改造、策略清理、替换旧模块——时,常规工具往往不够用。正则只能按文本匹配,一旦代码格式稍有变化:换行位置不同、引号风格不同、变量命名不同,匹配就可能漂移。手工改动则难以覆盖大规模代码库,产出的 diff 也很难逐条审查。迁移真正需要的是基于语法结构的重写:代码解析后的树形结构匹配上了才算命中,每次改动都输出可审查的 diff。

GritQL 的工作方式

这个技能的核心是使用 GritQL 结构化模式来定义「匹配什么」和「如何重写」:

  • 模式写在反引号里,直接描述目标结构,例如在仓库中找出所有 console.log 调用。
  • 匹配发生在解析树层面而非文本层面,对格式差异有天然鲁棒性。
  • 多个模式可以组合成复杂查询,包括大型重构任务。
  • 重写结果以 diff 形式产出,进入人工审查循环逐条确认。

前提是准备好 Grit CLI、一个本地仓库,以及一套检查结构化模式产出 diff 的审查流程。

语言覆盖与上手门槛

学会 GritQL 之后,同一套模式语言可以用于重写多种语言:JavaScript/TypeScript、Python、JSON、Java、Terraform、Solidity、CSS、Markdown、YAML、Rust、Go 等。官方文档、交互式教程和 grit --help 都是合理的入门入口。

需要注意的一点:读写 codemod 时,需要把 AST 节点名在脑中翻译回源码的真实样貌。当模式行为不符合预期时,排查对象是抽象语法树的结构,而不是原始文本。

使用场景

  • 在 API 版本升级前,要把 JS/TS 代码库里所有旧接口调用批量替换为新签名,并逐条审查重写 diff。
  • 仓库里散落着大量 console.log 调用需要统一清理,希望按结构模式匹配后批量重写而非逐文件手改。
  • 多文件 Terraform 或 Solidity 仓库要执行策略清理,把旧命名规范批量迁移到新规范并保留审查记录。
  • Python 或 Go 项目引入新依赖策略,需要在迁移前先按语法结构搜出所有命中点再统一改写。

适合人员

  • 后端工程师,在 API 版本升级前需要先搜出全部调用点再批量迁移到新签名。
  • 基础设施工程师,要把 Terraform 或 Solidity 配置从旧命名规范迁移到新规范。
  • 平台工程师,负责大规模策略清理,需要输出可逐条审查的批量重写结果。
  • 维护大型 JS/TS 或 Go 仓库的技术负责人,用结构化模式替代正则做重构验证。