11

可悲的是,我最近一直在做的一个项目有大量的复制和粘贴代码,即使在单个文件中也是如此。是否有任何工具或技术可以检测单个文件中的重复或接近重复?我有 Beyond Compare 3,它可以很好地比较单独的文件,但我在比较单个文件时不知所措。

提前致谢。

编辑:

感谢所有伟大的工具!我一定会检查出来的。

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

4

9 回答 9

4

查看Atomiq。它找到重复的代码,这些代码是提取到一个位置的主要代码。

http://www.getatomiq.com/

于 2010-02-02T05:01:59.833 回答
2

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

于 2010-02-02T04:37:42.927 回答
1

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

CloneDR 可处理多种语言,包括 Java(1.4、1.5、1.6)和 C#,尤其是 C#4.0。您可以在网站上查看示例克隆检测报告,其中还包括一份针对 C# 的报告。

于 2010-02-02T10:31:35.000 回答
1

你不说你使用的是什么语言,这会影响你可以使用什么工具。

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

于 2010-02-02T18:18:35.807 回答
0

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

于 2010-02-02T04:47:55.667 回答
0

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

于 2010-03-24T22:36:17.903 回答
0

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

  • 使用普通格式化程序统一代码风格,最好不换行
  • 将代码文本作为单列输入 Microsoft Excel
  • 搜索并用单个空格替换所有双空格并进行其他替换
  • 排序列

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

  • 将比较器公式添加到第 2 列,将计数器添加到第 3 列
  • 再次复制和粘贴值,排序并查看最重复的行
于 2010-02-12T01:22:01.923 回答
0

检查PMD,一旦你配置了它(这有点简单),你就可以运行它的复制粘贴检测器来查找重复的代码。

于 2010-02-02T08:47:10.960 回答
0

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

于 2017-06-13T09:04:20.263 回答