clang-format не будет прикреплять фигурную скобку, если есть новая строка

У меня проблема с форматом clang:

Я хочу добиться, чтобы фигурные скобки в начале блоков всегда прикреплялись к функциональной главе / последовательности управления ...

Это означает, что вместо

int f()
{
     return 1;
}

or

if(o < 1)

{
    return -1;
}

clang-format следует всегда прикреплять открывающую скобку следующим образом:

int f() {
     return 1;
}

а также

if(o < 1) {
    return -1;
}

Хотя это работает для первого случая (нет новой строки между заголовком функции и фигурной скобкой), это не работает, если есть новая строка между заголовком функции / if и т. Д.

Я не нашел варианта для clang-format, обеспечивающего это. Вариант, наиболее близкий к тому, что я ищу, - BreakBeforeBraces: Attach, но он также не отформатировал второй случай должным образом. Игра с этой опцией, а также с опциями под BraceWrapping также не решила проблему. Есть ли способ настроить clang-format для соединения таких строк, как открывающие скобки, всегда заканчивающиеся в конце последней строки кода перед ними?

Я играл с онлайн-конфигураторами, такими как https://clangformat.com/ или http://cf.monofraps.net/, но не смог найти набор параметров, который бы отвечал моим потребностям.

В настоящее время я использую версию 3.8 в формате clang.


person Michael Beer    schedule 21.08.2018    source источник
comment
Вы пробовали BreakBeforeBraces: Allman?   -  person katrasnikj    schedule 21.08.2018
comment
@katrasnikj: Да, но это не решило проблему. Спасибо за предложение!   -  person Michael Beer    schedule 21.08.2018
comment
Для небольших функций запустите clang-format с stackoverflow.com/a/58802059/10063119 SFS_All, а затем удалите его и добавьте правильные фигурные скобки параметр.   -  person    schedule 09.08.2020


Ответы (1)


Вы можете использовать:

MaxEmptyLinesToKeep: 0

Это приведет к удалению пустых строк, а затем фигурные скобки будут отформатированы так, как вы запрашиваете.

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

Кроме этого, я не думаю, что это возможно с clang-format 6.0.0. Я не думаю, что он был добавлен в более новые версии - ничего в документации похоже, имеет отношение к этому.

person Eric Backus    schedule 09.08.2020