Подтвердить что ты не робот

Clang-format: всегда ломаться, если параметры не подходят?

Я не могу понять, можно ли настроить clang-format, чтобы всегда ломаться, если параметры не подходят, то есть:

// Try this first:
SomeCall(aaa, bbb, ccc);

// If doesn't fit, try this:
SomeCall(
     aaa, bbb, ccc);

// If still doesn't fit, do NOT try this:
SomeCall(aaa, bbb,
         ccc);

// and NOT this:
SomeCall(aaa,
         bbb,
         ccc);

// but immediately do this:
SomeCall(
     aaa,
     bbb,
     ccc);

До сих пор я пришел к выводу, что это невозможно сделать с помощью clang-format 3.4. Правильно ли это?

4b9b3361

Ответ 1

К сожалению, я имею доступ только к clang-format 3.8.0 ( "clang-format version 3.8.0 (tags/RELEASE_380/final)" ), поэтому я не могу легко тестировать версию 3.4.

Там есть руководство для последней версии clang-format здесь, что я не знаю, нашли ли вы это или нет. Он ссылается на список Параметры стиля стиля Clang. Там есть опция стиля, которая перекликается с названием вашего вопроса: AlignAfterOpenBracket: AlwaysBreak, всегда ломается после открытой скобки, если параметры не помещаются в одну строку.

Чтобы использовать это, поместите в файл ~/.clang-format следующее:

AlignAfterOpenBracket: AlwaysBreak

После некоторого тестирования кажется, что он делает именно то, что вы хотели бы сделать, почти.

Он форматирует

SomeCall(aaa, bbb, ccc);

а

SomeCall(
  aaa, bbb,
  ccc);

если aaa, bbb, ccc не помещается в одну строку. Он не будет разрываться между aaa и bbb, пока aaa также не будет слишком длинным, и в этом случае bbb и ccc будут находиться в одной строке. То есть он прерывается после открытия (, но затем пытается заполнить строки. Он не разбивается автоматически на все запятые.

Рассматривая соответствующую страницу для clang-format 3.4, похоже, что этого параметра конфигурации, к сожалению, нет. Это дает вам два варианта:

  • Перейдите к более новой версии clang-format.
  • Не нужно.

Ответ 2

В более новой версии clang-формата это теперь можно выполнить с помощью

AlignAfterOpenBracket: AlwaysBreak
BinPackArguments: false
BinPackParameters: false

Для полного объяснения этих параметров см. https://clang.llvm.org/docs/ClangFormatStyleOptions.html.