用于扫描重复或类似代码块的ruby代码文件的工具

时间:2016-06-01 16:45:47

标签: ruby dry

有没有办法扫描ruby文件重复代码?

我有近30个文件,每个文件在200-1000行代码之间,我需要优化和重构它们。

我在考虑将重复的代码移动到可以在所有文件中使用的实用程序类。

是否有某种扫描工具可以轻松找到并标记重复或类似代码的块?

或者我只是要咬掉众所周知的子弹并手工完成?

2 个答案:

答案 0 :(得分:4)

您可以查看 flay https://github.com/seattlerb/flay 来自文档:

  

Flay分析结构相似性的代码。字面上的差异   值,变量,类,方法名称,空格,编程风格,   大括号vs do / end等都被忽略了。完全做到这一点。

或者,根据您的预算,您可以使用其中一个托管的静态代码分析服务创建一个帐户,并将代码推送到那里进行检查。

答案 1 :(得分:2)

我们的CloneDR工具可以做到这一点;我们刚刚为Ruby完成了一个。它寻找匹配一组约束的重复代码(大小,#变异点,匹配部分/总数的相似性等)。

以下是针对大多数Metasploit代码库的CloneDR运行示例。 那是Ruby代码的460K SLOC; (至少)14%的代码库是克隆。

下面的第一张图是摘要页面。第二个是检测到的克隆示例(在该代码库中找到的3000个中的一个);您可能想在浏览器中点击此图片并使用“+”按钮使其更大,更容易看到。

Summary Page from Ruby CloneDR run

Example Ruby Clone