5个版本

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

822编程语言 中排名

Download history 26/week @ 2024-03-11 35/week @ 2024-03-18 48/week @ 2024-03-25 55/week @ 2024-04-01 21/week @ 2024-04-08 27/week @ 2024-04-15 33/week @ 2024-04-22 26/week @ 2024-04-29 35/week @ 2024-05-06 22/week @ 2024-05-13 27/week @ 2024-05-20 28/week @ 2024-05-27 22/week @ 2024-06-03 23/week @ 2024-06-10 25/week @ 2024-06-17 33/week @ 2024-06-24

103 每月下载量
11 crate 中使用

MIT 许可证

56KB
1.5K SLoC

摩格洛

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

摩格洛侧重以下目标

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

简介

以下示例展示了摩格洛的用法。以下是查找表达式对自身无意义的赋值的方法

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工具完成会非常困难。

有关更多详情,请参阅文档

依赖项

~6–8.5MB
~177K SLoC