可识别C++的Diff实用程序

toh*_*ava 7 c++ diff g++ clang abstract-syntax-tree

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

我想到的是: - 将两个文件转换为AST - 将AST渲染为C++代码(这标准化缩进) - 在这两者之间做正常的差异 - 同时尝试检测已完成的简单重构(添加/删除/重命名)成员例如)

Ira*_*ter 5

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

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

SmartDifferencer 有适用于其他语言的版本。

[披露:我是 Semantic Designs 的 CTO]


Sti*_*sis 1

您可以在进行差异之前通过 AStyle 传递代码来规范缩进/间距/格式。这对重构没有任何作用,但老实说,您需要完整的预处理/编译过程才能正确执行此操作(AFAICS)。

http://astyle.sourceforge.net/

  • 该工具不强制采用 CANONICAL 形式。以“int main()\n{\n}”与“int main\n()\n{\n}”为例。它们不会产生相同的输出。在这种情况下,实际将代码编译成 AST 的工具会很有帮助。 (2认同)
  • 好吧,如果您想要一个免费的现有实用程序来为您完成所有这一切,那么您的要求就很高了。为了回答你原来的问题,我认为如果你想要一些能完成你所描述的所有事情的东西,你需要写它。在我看来,你最好与你的同事交谈并达成共识,或者找到一份新工作。 (2认同)