В формате clang, как я могу гарантировать, что после объявления шаблона будет разрыв строки?

Как написано в документации по формату clang , я установил для параметра BreakTemplateDeclarations значение «Да», но при форматировании моего кода он все равно помещается в ту же строку. например

template<typename type> class Class{};

вместо

template<typename type>
class Class{};

Есть ли что-то, что я упускаю из виду?

Я попробовал вариант BreakTemplateDeclarations, а также вариант (устаревший) AlwaysBreakTemplateDeclarations, но ничего не изменилось.

Это мой текущий файл в формате .clang:

---
BasedOnStyle: WebKit
AlignAfterOpenBracket: Align
AlignArrayOfStructures: Left
AlignOperands: AlignAfterOperator
AlignConsecutiveMacros: None
AlignEscapedNewlines: DontAlign
AlwaysBreakTemplateDeclarations: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Empty
AllowShortFunctionsOnASingleLine: Empty
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces: Attach
BreakBeforeConceptDeclarations: Always
BreakTemplateDeclarations: Yes
ColumnLimit: 120
Cpp11BracedListStyle: true
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Always
FixNamespaceComments: true
IncludeBlocks: Regroup
IndentAccessModifiers: true
IndentCaseLabels: true
IndentExternBlock: Indent
IndentWidth: 4
InsertBraces: true
IntegerLiteralSeperator:
  Binary: -1
  Decimal: 3
  DecimalMinDigits: 5
  Hex: 2
  HexMinDigits: 6
JavaScriptQuotes: Double
KeepEmptyLinesAtEOF: false
KeepEmptyLinesAtTheStartOfBlocks: false
LineEnding: LF
MaxEmptyLinesToKeep: 1
PackConstructorInitializers: NextLine
NamespaceIndentation: None
PenaltyReturnTypeOnItsOwnLine: 200
PenaltyBreakOpenParenthesis: 200
PenaltyBreakTemplateDeclaration: 0
PenaltyIndentedWhitespace: 1
PointerAlignment: Right
ReferenceAlignment: Right
RemoveParentheses: MultipleParentheses
SeperateDefinitionBlocks: Always
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: false 
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: false
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false 
SpacesInAngles: Never
SpacesInContainerLiterals: false
SpacesInLineCommentPrefix:
  Minimum: 1
  Maximum: 1
SpacesInParens: Never
SpacesInSquareBrackets: false
TabWidth: 4
UseTab: Always
...

Не могу повторить. Опубликуйте свой формат .clang.

3CxEZiVlQ 15.04.2024 00:08

Какую версию формата clang вы используете? AlwaysBreakTemplateDeclarations (устарело) переименовано в BreakTemplateDeclarations в формате clang 19.

3CxEZiVlQ 15.04.2024 00:37

Ваш конфиг, но с AlwaysBreakTemplateDeclarations: Yes работает с моим clang-форматом 18.1.2.

3CxEZiVlQ 15.04.2024 00:39

Ааа, это была проблема, которую я пробовал только AlwaysBreakTemplateDeclarations как вариант Bool. Спасибо за вашу помощь!

DavVader 15.04.2024 00:40

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

3CxEZiVlQ 15.04.2024 00:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
347
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы указали неправильное значение true для ключа AlwaysBreakTemplateDeclarations (переименованного в BreakTemplateDeclarations начиная с clang-format 19). Из документации по формату clang возможные значения:

Возможные значения:

  • Оставить: не меняйте перенос строки перед объявлением.
  • Нет: не выполнять принудительное прерывание перед объявлением.
  • MultiLine: Принудительный разрыв после объявления шаблона только в том случае, если следующее объявление занимает несколько строк.
  • Да: всегда прерывать работу после объявления шаблона.

Чтобы решить эту проблему, измените true на Yes.

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