消除单个文件中的代码重复

时间:2010-02-02 04:31:41

标签: refactoring code-duplication

可悲的是,我最近一直在开发的项目有大量的复制粘贴代码,即使在单个文件中也是如此。是否有任何工具或技术可以检测单个文件中的重复或近似重复?我有超越比较3,它适用于比较单独的文件,但我不知道比较单个文件。

提前致谢。

修改

感谢所有出色的工具!我肯定会检查出来。

这个项目是一个ASP.NET / C#项目,但我使用各种语言,包括Java;我对哪些工具最好(适用于任何语言)感兴趣,以消除重复。

9 个答案:

答案 0 :(得分:4)

结帐Atomiq。它找到了重复的代码,它是提取到一个位置的主要原因。

http://www.getatomiq.com/

答案 1 :(得分:2)

如果您正在使用Eclipse,则可以使用复制粘贴检测器(CPD)https://olex.openlogic.com/packages/cpd

答案 2 :(得分:1)

请参阅SD CloneDR,这是一种用于检测多个文件内和跨文件的复制粘贴编辑代码的工具。它可以检测精确的副本,已重新格式化的副本,以及具有不同标识符,文字甚至不同语句序列的近乎未命中的副本。

CloneDR可以处理多种语言,包括Java(1.4,1.5,1.6)和C#,尤其是C#4.0。您可以在网站上看到样本克隆检测报告,也包括C#。

答案 3 :(得分:1)

您没有说出您正在使用的语言,这会影响您可以使用的工具。

对于Python,有CloneDigger。它也支持Java,但我还没试过。它可以在单个文件和文件之间找到代码重复,并以HTML格式提供类似diff的报告结果。

答案 4 :(得分:0)

Resharper自动执行此操作 - 它建议何时将代码提取到方法中,并为您执行提取

答案 5 :(得分:0)

结束PMD,一旦配置完毕(简单一点),您可以运行copy paste detector来查找重复的代码。

答案 6 :(得分:0)

具有一些Office技能的人可以在1分钟内完成以下序列:

  • 使用普通格式化程序来统一代码样式,最好不要换行
  • 将代码文本作为单列提供给Microsoft Excel
  • 使用单一空格搜索并替换所有双空格并执行其他替换
  • 排序列

此时,已经很好地检测到重复项的关键字。但要走得更远

  • 将比较公式添加到第2列并反对第3列
  • 再次复制并粘贴值,排序并查看最重复的行

答案 7 :(得分:0)

有一个名为Simian的分析工具,我还没有尝试过。据说它可以在任何类型的文本上运行并指出重复的项目。它可以通过命令行界面使用。

答案 8 :(得分:0)

与上述类似的另一种选择,但使用不同的工具链:https://www.npmjs.com/package/jscpd