Получение различий между двумя сильно отформатированными файлами C - PullRequest
3 голосов
/ 03 марта 2011

Недавно я получил от кого-то относительно важное дополнение к некоторому программному обеспечению, которое я поддерживаю. К сожалению, вместо того, чтобы предоставить diff, он просто дал мне все свое дерево исходных текстов, и, что еще хуже, похоже, что он использовал какой-то код, который превосходит все, что я использовал или видел, включая такие вещи, как

  • Вставка и удаление пробелов в различных точках внутри линий.
  • Разбиение некоторых условных выражений на блоки в скобках, превращение некоторых в однострочные условные выражения и превращение некоторых в условные с переносом строки, но без скобок.
  • Перемещение некоторых комбинированных операторов в отдельные строки и объединение некоторых разделенных операторов в одну строку.
  • Вставка и удаление разрывов строк внутри таких мест, как аргументы функций.
  • Etc

Запуск отступа (BSD) для файлов из его версии и более старой версии не сближает их. Использование astyle тоже не работает. В любом случае, есть еще довольно много остатков различных стилей форматирования.

Существует ли какой-либо модуль форматирования C, который по существу удалял бы как можно больше форматирования, а затем последовательно форматировал бы код? Или есть какой-нибудь способ заставить форматировщик сделать это? Это не должно выглядеть ужасно красиво, мне просто нужно иметь возможность получить разумную разницу, чтобы увидеть, что он на самом деле изменил.

Ответы [ 4 ]

4 голосов
/ 03 марта 2011

Я бы попытался удалить как можно больше пробелов с помощью tr -s ' \t\r\n' ' ' или эквивалентного, а затем передать результат обратно в indent. (К сожалению, не могу выполнить tr -d, потому что это может повредить границы токена.)

3 голосов
/ 03 марта 2011

uncrustify - еще один вариант, который вы можете попробовать - экстремальная конфигурируемость немного подавляющая, но она способна выполнять большинство (если не все) из упомянутых вами действий.

2 голосов
/ 03 марта 2011

Реформаторы, которые идут с пакетами разработки Netbeans и Eclipse C, очень агрессивны, возможно, вы могли бы попробовать их.

1 голос
/ 03 марта 2011

Вы можете предварительно обработать оба файла, а затем развести их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...