【发布时间】:2010-10-06 02:47:54
【问题描述】:
我试图找到一些语义差异/合并实用程序的好例子。比较源代码文件的传统范例是通过比较行和字符来工作的。但是在比较文件时是否有任何实用程序(适用于任何语言)实际考虑代码的结构?
例如,现有的差异程序将报告“在第 125 行的字符 2 处发现差异。文件 x 包含 v-o-i-d,其中文件 y 包含 b-o-o-l”。专门的工具应该能够报告“doSomething() 方法的返回类型从 void 更改为 bool”。
我认为这种类型的语义信息实际上是用户在比较代码时所寻找的,并且应该是下一代编程工具的目标。可用工具中有这方面的例子吗?
【问题讨论】:
-
看起来已经对树编辑距离进行了一些研究。将其应用于 AST 似乎是首先要尝试的事情。 (如果有人想尝试写这种东西。)
-
我不确定它是否真的有用。像您提到的差异比阅读更容易看到,特别是如果您有一个工具突出显示行内的差异。识别某些代码是否刚刚被移动而不改变的能力会更容易和更有用,恕我直言!
-
@UncleZeiv 我希望该功能自然会遵循该工具的性质。此外,如果有人通过并更改了花括号或缩进样式,或者重新排列文件以便对静态方法进行分组等,它将能够检测到没有任何更改。
-
我现在在 Visual Studio 中需要这个。强迫团队中的开发人员使用相同的格式结构来促进差异是一种倒退的想法。代码应该在签入时按照某种标准进行格式化,并且任何时候开发人员打开文件时,都应该按照他们的喜好对其进行格式化。我很震惊这种想法在这一点上没有得到更广泛的传播。
-
恕我直言,这是一个很好的话题。如果您同意这一点,请投票“重新开放”
标签: language-agnostic diff semantics