6

是否有免费的 diff 实用程序可以使用它们的 AST 而不是文本来比较两个 C++ 文件?

我在想的是这样的:

  • 将两个文件都转换为 AST
  • 将 AST 渲染为 C++ 代码(这将缩进规范化)
  • 在这两者之间做正常的差异
  • 还尝试检测已完成的简单重构(例如添加/删除/重命名成员)
4

4 回答 4

4

[其他回答者之一要求发布商业工具的名称。]

Semantic Designs 的 SmartDifferencer 工具将解析 C++,并根据 AST 计算差异;布局格式根本不重要。解析器是一个完整的 C++11 解析器。它可以解析大多数源文件,而无需扩展大多数预处理器指令,只要它们是“结构化的”;C++ 预处理器的使用通常不像在 C 中那样滥用。

有其他语言的 SmartDifferencer 版本。

[披露:我是 Semantic Designs 的 CTO]

于 2013-01-10T15:28:10.063 回答
2

对于您的问题,我可以想到两种替代解决方案:

  1. 讨论将作为一个小组使用的编码风格并坚持下去。您可能必须在团队成员不同的个人编码风格之间找到折衷方案。

  2. 如果您正在使用源代码管理,请添加挂钩以删除提交时的所有格式并在结帐时自定义代码格式。这需要一些工作,但允许团队成员使用自己的格式样式。当然,这并不能解决变量命名和其他非格式化代码样式元素的不同意见。

于 2013-01-09T19:21:30.587 回答
2

有像 MOSS ( http://theory.stanford.edu/~aiken/moss/ ) 这样的工具可能会有所帮助。

于 2013-06-30T12:49:40.737 回答
1

您可以通过 AStyle 传递代码以在执行差异之前规范化缩进/间距/格式。这不会对重构做任何事情,但老实说,您需要完整的预处理/编译通过才能正确执行此 AFAICS。

http://astyle.sourceforge.net/

于 2013-01-09T19:13:12.647 回答