【发布时间】:2011-01-14 03:21:03
【问题描述】:
我正在尝试重构一个主要问题是重复代码的 python 模块。
是否有任何工具可以用来查看两个选定部分的差异,以便我可以看到那些几乎相同的代码之间的区别?
【问题讨论】:
-
如何将这两部分剪切并粘贴到两个新文件中,然后使用任何好的 diff 工具,例如 meld、kdiff3 甚至普通的旧 diff?
标签: python refactoring diff
我正在尝试重构一个主要问题是重复代码的 python 模块。
是否有任何工具可以用来查看两个选定部分的差异,以便我可以看到那些几乎相同的代码之间的区别?
【问题讨论】:
标签: python refactoring diff
我在使用 Emacs 之前偶尔会这样做:
M-x clone-indirect-buffer)。C-x n n)。M-x ediff-two-buffers)。一个不错的好处是您可以在它们之间合并块并且不会混淆。
【讨论】:
C-x 4 c 到clone-indirect-buffer
虽然我认为界面不是很好,但请查看Clone Digger。见example。
Thinking Craftsman's Tool Kit (TC Toolkit) 可能更容易找到重复的代码,但似乎不能提供良好的可视化效果。
编辑:如果你愿意付费,Atomiq 看起来很有趣。
为了获得良好的可视化效果,我使用Diffuse 取得了一些成功,因为它允许任意匹配从一个文件到另一个文件的行:
但是,我实际上必须使用不同的名称复制文件才能正常工作。
【讨论】:
我对所有文件差异都使用 ExamDiff Pro。这是一个图形分析器。
【讨论】:
如果您只有一个文件中的克隆并且您知道它们在哪里,那么克隆检测工具可能会过大。但他们检测克隆并将其直接展示给您的能力似乎正是您想要的。
我们的CloneDR 有一个特定于 Python 的版本。如果它找到克隆(即使在“相同”文件中),它会单独向您显示它们,并根据该语言(Python)规则准确地向您显示它们的不同之处,而不仅仅是布局,包括克隆的位置变化以及它们的变化方式。 (据我了解,Atomiq 只会检测具有完全相同文本行的克隆)。
CloneDR 在 Windows 下运行良好。
【讨论】:
Beyond Compare 的文本比较有一个“打开剪贴板”命令,该命令会将剪贴板上的任何内容放在比较的一侧。如果您随后复制第二个函数并再次使用该命令,则会将它们对齐并突出显示差异。
【讨论】: