gritql
v0.1.0-alpha.1732682283
游乐场|教程 |文档
GritQL 是一种用于搜索和修改源代码的声明性查询语言。
阅读文档、交互式教程或运行grit --help
。
安装 Grit CLI:
curl -fsSL https://docs.grit.io/install | bash
通过将所需的模式放在反引号中来搜索所有console.log
调用:
grit apply '`console.log($_)`'
将console.log
替换为winston.log
,使用=>
创建重写:
grit apply '`console.log($msg)` => `winston.log($msg)`'
将模式保存到grit.yaml
文件并排除 where 子句中的测试用例:
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
运行grit check
以将您的模式强制执行为自定义 lint。
grit check
console.log
调用,除非它们位于 try-catch 块内 `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
在 GritQL 标准库中可以找到更多示例。
可以组合模式来创建复杂的查询,包括大型重构。
GritQL 来自我们进行大规模重构和迁移的经验。
通常,迁移从探索性工作开始,以找出问题的范围——通常使用简单的 grep 搜索。这些很容易开始,但大多数迁移最终都会积累额外的要求,例如确保导入正确的包以及排除没有可行迁移路径的情况。
最终,任何复杂的迁移最终都会成为使用 jscodeshift 等工具编写的完整 codemod 程序。这也有其自身的问题:
GritQL 是我们开发强大中间立场的尝试:
$metavariables
来表示您想要表示的漏洞。GritQL 对所有语言解析器使用树守护者,并从 Rust 生态系统中受益匪浅。
GritQL 在 MIT 许可证下发布。
欢迎贡献。首先,请查看贡献指南。
您也可以加入我们的Discord 。