是否有一个免费的diff实用程序可以使用它们的AST而不是文本比较两个C ++文件?
我在想的是: - 将两个文件转换为AST - 将AST渲染为C ++代码(这标准化了缩进) - 在这两者之间做正常的差异 - 还尝试检测已完成的简单重构(例如添加/ del / rename成员)
答案 0 :(得分:4)
[其他一位发言人要求发布商业工具的名称。]
Semantic Designs的SmartDifferencer工具将解析C ++,并根据AST计算差异;布局格式化无关紧要。解析器是一个完整的C ++ 11解析器。它可以解析大多数源文件而不扩展大多数预处理器指令,只要它们是“结构化”的; C ++预处理器的使用通常不像在C中那样具有滥用性。
有其他语言版本的SmartDifferencer。
[披露:我是Semantic Designs的首席技术官]
答案 1 :(得分:2)
我可以为您的问题考虑两种替代解决方案:
讨论将作为一个组使用并坚持下去的编码风格。您可能必须在团队成员的不同个人编码风格之间找到妥协。
如果您正在使用源代码管理,请添加删除提交时删除所有格式的挂钩,并在结帐时自定义代码格式。这需要一些工作,但允许团队成员使用自己的格式样式。当然,这并不能解决变量命名和其他非格式化代码样式元素的不同意见。
答案 2 :(得分:2)
像MOSS(http://theory.stanford.edu/~aiken/moss/)这样的工具可能会有所帮助。
答案 3 :(得分:1)
您可以在执行diff之前通过AStyle传递代码以标准化缩进/间距/格式。这对重构没有任何作用,但老实说,你需要一个完整的预处理/编译通道才能正确地完成AFAICS。