Как написано в документации по формату 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 вы используете? AlwaysBreakTemplateDeclarations
(устарело) переименовано в BreakTemplateDeclarations
в формате clang 19.
Ваш конфиг, но с AlwaysBreakTemplateDeclarations: Yes
работает с моим clang-форматом 18.1.2.
Ааа, это была проблема, которую я пробовал только AlwaysBreakTemplateDeclarations
как вариант Bool. Спасибо за вашу помощь!
Это может быть для вас хорошим уроком: всегда публикуйте технические подробности и то, что вы пробовали, в качестве минимально воспроизводимого примера, а не перефразируйте такие деликатные детали в повествовании.
Проблема в том, что вы указали неправильное значение true
для ключа AlwaysBreakTemplateDeclarations
(переименованного в BreakTemplateDeclarations
начиная с clang-format 19). Из документации по формату clang возможные значения:
Возможные значения:
- Оставить: не меняйте перенос строки перед объявлением.
- Нет: не выполнять принудительное прерывание перед объявлением.
- MultiLine: Принудительный разрыв после объявления шаблона только в том случае, если следующее объявление занимает несколько строк.
- Да: всегда прерывать работу после объявления шаблона.
Чтобы решить эту проблему, измените true
на Yes
.
Не могу повторить. Опубликуйте свой формат .clang.