EN
返回档案库

档案库 · 产品创意 · 产品决策 · 2024–2026

GritQL 让任意代码片段成为查询,重写跨语言大型代码库

GritQL 将源代码转化为查询语言:粘贴你想查找的代码片段,添加元变量,即可重写跨语言的数百万行代码。

Grit

创意是什么查询即代码:反引号中的片段结构匹配,$元变量充当占位符,箭头表示重写——无需学习 AST,探索自然成长为 codemod。小步快跑

当时的题目

Large refactors usually begin as grep and end as full codemod programs in tools like jscodeshift: the exploratory search is abandoned while the regex is translated into AST concepts, frameworks are language-specific and hard to compose, and iteration on huge codebases is slow. GritQL set out to be the middle ground between grep and a codemod framework.

它是怎么成立的

GritQL 诞生于 Grit 自身的超大规模重构,其迁移遵循熟悉的轨迹:先用 grep 广泛搜索来界定问题,然后积累需求——例如要确保的导入、要排除的边界情况——最终将这项工作推向完整的 codemod 程序。其中大部分痛点集中在这个跳跃上:探索性工作被丢弃,正则必须脑内转换成 AST 节点,且每个框架针对特定语言,可组合性差。

GritQL 的举措是让查询看起来像代码本身。反引号中的任意代码片段都是合法查询——`console.log($_)` 会找到所有 console.log 调用——$metavariables 充当占位符,`=>` 将匹配转化为重写,where 子句添加附加条件,如“不在 try-catch 内”。相同的语法可用于搜索、自定义 lint 和迁移,因此首个 grep 可以硬化成永久规则,而无需切换工具或语言。

GritQL 基于 Rust 和 tree-sitter,引擎可扩展到 1000 万行以上的仓库以及十多种目标语言;其模块系统和超过 200 个模式的推荐标准库让复杂迁移可由小型、可审查的规则组合而成。2024 年 3 月的 Show HN 获得了 280 个点赞和 54 条评论,评论者提到在数天内就用它做了实际迁移;到 2026 年,项目页面位于 biomejs 组织下,拥有 4.6k 星标。

妙在哪

  • 工具语法与开发者语法一致:人们已经知道如何编写他们要查找的代码,因此首个查询无需 AST 术语或新框架。
  • 探索可以硬化成自动化:模式始于搜索,为边缘情况添加 where 子句,最终形成一个 lint 或迁移规则,并且全程在同一个文件中。
  • 组合取代复制粘贴:命名模式和共享的标准库让团队可以从小型、易审查的片段组装复杂迁移。
  • 引擎针对困难场景而构建:Rust 加 tree-sitter 保证了在多语言、1000 万行以上的仓库中查询速度快,而这些场景中较慢的 codemod 往往失败。

做出来什么

The Show HN drew 280 points and 54 comments on 20 March 2024, with developers reporting real migrations done in the first days — the OpenAI SDK 1.0 upgrade and a mobx-to-react-hooks move. The project page later moved to the biomejs organization, where the 2026 snapshot shows 4.6k stars, 125 forks and 379 commits.

案例页GritQL on GitHub — the language, examples and docs

可以借走的

从工作本身设计控制语言:当查询语法与要编辑的代码语法相同时,学习曲线消失,模式可以从搜索成长为永久性重写规则。

后来

GritQL 保持 MIT 开源许可,并继续作为 Grit 迁移工作的查询层,项目文档中仍依赖可复用模式的推荐标准库。到 2026 年,该仓库位于 biomejs 组织下,拥有 4.6k 星标、125 个 fork 和 379 次提交;该语言继续定位于搜索、lint、自动修复以及整个代码库的重写。

资料来源

发现哪里写错了?告诉我们。

轮到你了

你刚读完一个点子。把你手上的题目说出来,看看谁接过同样的题。

免费账号 · 3 次免费提问 · 不用绑卡

相关案例