Ben*_*ter 17 .net c# asp.net diff visual-studio
我正在寻找一个diff工具,它可以分析我的代码并告诉我构造基础上构造的变化.
例如,如果我从文件的开头剪切并粘贴一个方法并将其放在最后,但保持该方法不变,我不希望它被标记.但是,如果我在该方法中插入一行代码或更改某些内容,则会将其标记为已更改.
我已经使用了各种各样的差异工具,但是他们似乎都没有告诉你插入,删除或更改了行但却无法以任何逻辑方式分辨出这些变化.如果当我定期重新排列我的代码文件的布局时,diff工具可以跟上,这将是很好的.
有没有人有这样的工具?
Rob*_*ner 22
我不认为你可以做你想要的,因为最长的常见子序列算法适用于这些工具.
即使您的函数被重新排列,并且您的源文件的功能保持不变,由于LCS的性质,它仍然会显示为差异.
编辑:
这有点牵强,但如果你感觉更加雄心勃勃,你可以根据自己的确切需求编写自己的裁缝.
您可以使用正则表达式来提取源文件中的每个方法,并根据每个方法的名称单独对每个方法执行LCS diff.您可以将代码存储为Dictionary(键,值),以便键是方法的名称,值是函数的字符串.然后你只需用你的dictionary_new ['method']来区分你的dictionary_orig ['method'].
除此之外,我不知道你是如何完成你想要的.
查看我们的Smart Differencer工具,它可以比较抽象语法树,并报告AST所代表的非终结符("语言结构")和合理的编辑操作(插入,删除,移动)以及发现一致的重命名方面的差异. .
目前,它只处理Java和COBOL,但它基于DMS,它具有适用于各种语言的解析器,包括C#.
编辑9/8/2009:C#SmartDifferencer现在可供Beta测试人员使用.
该工具已经在整个文件中处理一致的重命名,因为它在语义上是微不足道的(假设其他文件相应地引用了重命名的符号),以及在范围内重命名.我们计划考虑语义上的微不足道的变化,例如在Java和C#的类中移动方法声明.
编辑2010年10月:提供生产版本. Eval下载可在网站上访问.
编辑2012年5月:您可以在此页面看到C#示例.
它目前没有做的事情之一是忽略语义空编辑.一个特殊的例子就是在课堂体内改变方法; 我们都知道这对C#的语义没有影响.我们的工具比较语法(通过AST),而不是语义,因此它不理解这种特殊的细微差别,因此会告诉用户"这已被移动"而不是沉默.我们计划在将来的某个时候处理这样的情况,但是,嘿,每个产品都必须有一个版本1: - } [作为一个微妙的点,Java类中的shuffling方法在语义上也是空的,但是洗牌字段不是应该的按顺序评估初始化程序.我不知道C#是否也是如此,但我不会感到惊讶.
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |