语法识别差异工具?

时间:2010-08-10 15:57:11

标签: diff

是否有任何(理想的GUI)diff工具可以识别语法?

作为我正在寻找的那种事物的一个例子,我一直发现我当前的工具错过了重复的代码:

Foo  = { 'hello': 'world',    |  Foo  = { 'hello': 'world',
         'goodnight': 'moon'  |           'goodnight': 'moon'  
       }                      <
                              <
Bar  = { 'picture': 1000,     <
       }                      |         }

我想要一种工具,可以尝试在一侧使用匹配的支架与另一侧的匹配支架对齐。


编辑:我正在寻找一种可以自动识别该条件并纠正其对齐的工具。

5 个答案:

答案 0 :(得分:4)

不是基于GUI,而是完全由语法驱动:我公司的Smart Differencer工具适用于许多语言(包括Java,C#,C ++,PHP,Python,JavaScript,HTML,XML,COBOL,......)

智能差异器解析源文本,就像编译器一样,因此它理解语言语法和结构与编译器的方式相同。它比较这些结构(使用AST)来确定这些结构上的编辑操作(移动,复制,删除,替换,重命名标识符在块中)的“最小编辑距离”并报告它们。

在你的例子中,它会知道右边的花括号属于foo,而不是bar,并且会告诉你整个涉及bar的语句都被删除了。

如果您想将结果提供给另一个工具,则输出样式是差异的,如果您想直接检查它,则输出样式更具人性化。

答案 1 :(得分:0)

Beyond Compare会让您重新排列不匹配的行。我通常可以很好地匹配线条。

答案 2 :(得分:0)

我认为Beyond Compare有你想要的东西 http://www.scootersoftware.com/index.php

答案 3 :(得分:0)

我喜欢Source Gear的DiffMerge。

答案 4 :(得分:0)

Pretty Diff工具会自动识别语法。它使用的过程是缩小代码以删除注释,然后美化代码以规范化格式和空白。它只支持一些Web客户端语言。此工具在客户端工作,因此您可以在浏览器中测试它,并且有一个包含一些演示的示例页面。