有没有办法扫描ruby文件重复代码?
我有近30个文件,每个文件在200-1000行代码之间,我需要优化和重构它们。
我在考虑将重复的代码移动到可以在所有文件中使用的实用程序类。
是否有某种扫描工具可以轻松找到并标记重复或类似代码的块?
或者我只是要咬掉众所周知的子弹并手工完成?
答案 0 :(得分:4)
您可以查看 flay :https://github.com/seattlerb/flay 来自文档:
Flay分析结构相似性的代码。字面上的差异 值,变量,类,方法名称,空格,编程风格, 大括号vs do / end等都被忽略了。完全做到这一点。
或者,根据您的预算,您可以使用其中一个托管的静态代码分析服务创建一个帐户,并将代码推送到那里进行检查。
答案 1 :(得分:2)
我们的CloneDR工具可以做到这一点;我们刚刚为Ruby完成了一个。它寻找匹配一组约束的重复代码(大小,#变异点,匹配部分/总数的相似性等)。
以下是针对大多数Metasploit代码库的CloneDR运行示例。 那是Ruby代码的460K SLOC; (至少)14%的代码库是克隆。
下面的第一张图是摘要页面。第二个是检测到的克隆示例(在该代码库中找到的3000个中的一个);您可能想在浏览器中点击此图片并使用“+”按钮使其更大,更容易看到。