Astyle - как отформатировать условие без фигурных скобок в 1TBS

У меня есть программа, которая использует Astyle для форматирования кода в 1TBS. Итак, если у меня есть такой код

if(condition)
    func(a, b);

это меняется на это

if(condition) {
    func(a, b);
}

Проблема в том, что когда параметры в вызываемой функции разбиты на несколько строк, вот так:

if(condition)
    func(a, 
         b);

Тогда Астиль не сможет добавить фигурные скобки, даже если я попытаюсь заставить его --add-brackets, Можно ли сделать это как-то иначе?

Моя команда теперь выглядит так:

astyle --style=1tbs --add-brackets  test.c

1 ответ

Решение

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

Вы можете придерживаться astyle, но вам нужно временно отменить сертификацию, а также сценарий, который я написал под названием whatstyle.

В следующих шагах замените test1.c с вашими источниками и сохраните резервную копию ваших источников, как они будут изменены.

Научите стилю текущий стиль ваших источников

whatstyle.py -f astyle --mode resilient --output astylerc test1.c

Научите не доверять текущему стилю ваших источников

whatstyle.py -f uncrustify --output uncrustify.cfg test1.c

Скажите uncrustify, чтобы всегда добавлять фигурные скобки в ifs

( egrep -v mod_full_brace_if < uncrustify.cfg ; echo "mod_full_brace_if = force" ) \
  > uncrustify_addbrace.cfg

Переформатируйте ваши источники с минимальными изменениями стиля с помощью uncrustify

uncrustify --replace -c uncrustify_addbrace.cfg test1.c

Добавлены брекеты, теперь они трансформируются в оригинальный стиль с помощью astyle.

ARTISTIC_STYLE_OPTIONS=astylerc astyle test1.c

Теперь ваши источники должны выглядеть почти так же, как и раньше, за исключением добавленных фигурных скобок, хотя может быть больше изменений при преобразовании стиля назад и вперед.

Другие вопросы по тегам