clang-format: разбивать аргументы функций вместо спецификаторов функций (кроме исключений) - PullRequest
5 голосов
/ 14 марта 2020

Я ищу способ форматирования приведенного ниже кода C ++ в формате clang (версия 9.0.0), чтобы определения функций, превышающие предел в 80 столбцов, нарушались после объявления аргументов вместо квалификаторов функций C ++, таких как noexcept :

void scheduler::stop_mark(service &current, service const &stopped) const
    noexcept {
  // ...
}

В приведенном выше фрагменте показан мой код, отформатированный с использованием стиля LLVM по умолчанию, а следующий код - тот, который я хочу получить после правильного форматирования:

void scheduler::stop_mark(service& current,
                          service const& stopped) const noexcept {
  // ...
}

Разница между двумя фрагментами кода строка разрывается после service& current, вместо noexcept.

Это поведение воспроизводимо при использовании стиля по умолчанию LLVM, но я использую следующие параметры для справки:

---
BasedOnStyle: LLVM

AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'true'
AllowAllParametersOfDeclarationOnNextLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'true'
BreakConstructorInitializers: BeforeComma
BreakConstructorInitializersBeforeComma: 'true'
ConstructorInitializerIndentWidth: 2
FixNamespaceComments: 'true'
IndentCaseLabels: 'true'
IndentPPDirectives: AfterHash
PenaltyBreakAssignment: 1000
PenaltyBreakBeforeFirstCallParameter: 50
PointerAlignment: Left
...

Возможно ли получить такое форматирование с помощью clang-format?

Я уже проверил все возможные параметры на https://zed0.co.uk/clang-format-configurator/ и не смог найти соответствующий clang- опция формата.

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Я согласен, что ни одна комбинация правил не даст желаемого результата, но есть способ заставить его, когда вы обнаружите подобные вещи.

Добавьте комментарий к строке (может быть пустым) после вашего Первый параметр После этого clang-формат выровняет ваши параметры.

void scheduler::stop_mark(service& current, //
                          service const& stopped) const noexcept {
  // ...
}
0 голосов
/ 22 марта 2020

Насколько мне известно, вы не можете сделать это.

Моя первоначальная мысль состояла в том, чтобы установить BinPackParameters в false, но кажется, что clang-format имеет предпочтение разбивать квалификаторы функций даже в этом случай.

...