GritQL 结构化代码迁移
将以下提示词粘贴到你的 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 仓库的技术负责人,用结构化模式替代正则做重构验证。