g ++ — утилита Diff, поддерживающая C ++

Есть ли бесплатная утилита сравнения, которая может сравнивать два файла C ++, используя их AST вместо текста?

То, о чем я думал, это что-то вроде
— конвертировать оба файла в AST
— Отобразить AST обратно как код C ++ (это канонизирует отступы)
— сделать нормальный diff между этими двумя
— Также попытайтесь обнаружить простые рефакторинги, которые были сделаны (например, добавьте / del / rename member)

6

Решение

[Попросил одного из других ответчиков опубликовать название коммерческого инструмента.]

Инструмент SmartDifferencer от Semantic Designs будет анализировать C ++ и вычислять разницу на основе AST; форматирование макета просто не имеет значения. Парсер является полным C ++ 11 парсером. Он может анализировать большинство исходных файлов, не раскрывая большинство директив препроцессора, если они «структурированы»; Использование препроцессора C ++ обычно не так оскорбительно, как в C.

Существуют версии SmartDifferencer для других языков.

[Раскрытие информации: я технический директор Semantic Designs]
4

Другие решения

Я могу придумать два альтернативных решения вашей проблемы:

  1. Обсудите стиль кодирования, который будет использоваться в качестве группы, и придерживайтесь его. Возможно, вам придется искать компромиссы между разными стилями кодирования членов команды.

  2. Если вы используете управление исходным кодом, добавьте хуки, которые удаляют все форматирование при фиксации и настраивают форматирование кода при оформлении заказа. Это требует некоторых работ, но позволяет членам команды использовать свой собственный стиль форматирования. Конечно, это не решает разные мнения в именовании переменных и других неформатирующих элементах стиля кода.

2

Есть такие инструменты, как MOSS (http://theory.stanford.edu/~aiken/moss/) который может быть полезен

2

Вы можете передать код через AStyle, чтобы нормализовать отступ / интервал / форматирование перед выполнением diff. Это ничего не даст для рефакторингов, но, честно говоря, вам понадобится полный проход перед обработкой / компиляцией, чтобы сделать это правильно AFAICS.

http://astyle.sourceforge.net/

1
По вопросам рекламы [email protected]