4 个版本

0.1.1 2023年4月3日
0.1.1-rc.32023年4月1日

开发工具 中排名 2539

每月下载量 43

MIT 许可证

62KB
1.5K SLoC

Mogglo

Mogglo 是一个基于AST的多语言代码搜索和重写工具。Mogglo 支持在搜索模式和替换中嵌入 Lua 代码。

Mogglo 关注以下目标

  • 最小化设置:Mogglo 可以在任何受支持语言的代码库上立即工作。
  • 多种语言:12 种及以上!
  • 高质量的语法:Mogglo 基于 tree-sitter 语法。
  • Lua:Mogglo 向嵌入 Lua 片段提供了丰富的 API。

介绍

以下示例展示了 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 工具会很困难。

请参阅 文档 获取更多详细信息!

依赖项

~16MB
~388K SLoC