4 个版本
0.1.1 | 2023 年 4 月 3 日 |
---|---|
0.1.1-rc.3 | 2023 年 4 月 1 日 |
2319 在 开发工具
每月 44 次下载
62KB
1.5K SLoC
Mogglo
Mogglo 是一个基于 AST 的多语言代码搜索和重写工具。Mogglo 支持在搜索模式和替换中嵌入 Lua 代码。
Mogglo 关注以下目标
- 最小化设置:Mogglo 将在任何受支持的代码库上立即工作。
- 许多语言:12 种以上!
- 高质量的语法:Mogglo 基于 tree-sitter 语法。
- Lua:Mogglo 提供了一个丰富的 API 来嵌入 Lua 段落。
介绍
以下示例展示了 Mogglo 的功能。以下是如何查找表达式对自身的无意义赋值
mogglo-rust --detail 'let $x = $x;' ./**/*.rs
Lua 代码用大括号括起来。Lua 可以使用 rec
递归匹配模式。以下是一个检测越界数组访问的模式
mogglo-rust 'while $i <= $buf.len() { ${{ rec("$buf.get($i)") }} }' ./**/*.rs
以下是如何 展开 一个简单的循环
mogglo-rust \
'for $i in 0..$h { $b; }' \
--where 'h_num = tonumber(h); return h_num ~= nil and h_num % 4 == 0' \
--replace 'for $i in 0..${{ string.format("%.0f", h / 4) }} { $b; $b; $b; $b; }' \
./*/**.rs
这种转换展示了使用 Lua 的力量:它不能使用正则表达式替换完成,而且使用其他 codemod 工具会非常困难。
有关更多详细信息,请参阅 文档!
依赖关系
~25MB
~662K SLoC