如何强制clang-format 15将函数参数拆分为单独行?
如何强制clang-format将函数参数拆分为单独行?
问题详情
我需要让clang-format将函数声明的每个参数都放在单独一行,但当前配置无法实现预期效果。
当前代码:
virtual void OnSlotSelected(class UArcAbilitySystemComponentBase* InArcASC, class UArcQuickBarComponent* QuickBar, const struct FArcSlotData* InSlot) const {};
期望格式:
virtual void OnSlotSelected(class UArcAbilitySystemComponentBase* InArcASC , class UArcQuickBarComponent* QuickBar , const struct FArcSlotData* InSlot) const {};
当前clang-format配置:
Language: Cpp BasedOnStyle: LLVM BreakConstructorInitializers: BeforeComma BreakInheritanceList: BeforeComma AccessModifierOffset: -4 AlignAfterOpenBracket: BlockIndent PointerAlignment: Left AllowAllArgumentsOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: false BinPackArguments: false BinPackParameters: false #ExperimentalAutoDetectBinPacking: true #PenaltyBreakBeforeFirstCallParameter: 1 #PenaltyBreakOpenParenthesis: 1 AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignOperands: true AlignTrailingComments: false AlwaysBreakTemplateDeclarations: Yes BraceWrapping: AfterCaseLabel: true AfterClass: true AfterControlStatement: true AfterEnum: true AfterFunction: true AfterNamespace: true AfterStruct: true AfterUnion: true AfterExternBlock: false BeforeCatch: true BeforeElse: true BeforeLambdaBody: true BeforeWhile: true SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBraces: Custom ColumnLimit: 0 IncludeCategories: - Regex: '^<.*' Priority: 1 - Regex: '^".*' Priority: 2 - Regex: '.*' Priority: 3 IncludeIsMainRegex: '([-_](test|unittest))?$' IndentCaseBlocks: true IndentCaseLabels: true IndentWidth: 4 IndentWrappedFunctionNames: true MacroBlockBegin: '' MacroBlockEnd: '' NamespaceIndentation: All SpacesInAngles: false TabWidth: 4 UseTab: Always
解决方案
需要在现有配置中添加/修改以下关键项,强制参数拆分并匹配期望的逗号位置:
BreakBeforeParens: All BreakParameters: BeforeComma PenaltyBreakParameterDeclaration: 0
配置项说明
BreakBeforeParens: All:强制在函数声明的左括号后换行,确保参数不会与函数名处于同一行,为参数单独成行提供基础。BreakParameters: BeforeComma:指定逗号位于下一行的开头,完全匹配你期望的格式。注意该选项需要clang-format 14及以上版本支持;若你的版本较低,可改用BreakBeforeComma: true(此选项会影响所有场景下的逗号位置,包括数组、初始化列表等)。PenaltyBreakParameterDeclaration: 0:默认clang-format对参数换行有惩罚权重,设置为0后消除该惩罚,确保即使ColumnLimit设为0(无长度限制),也会强制将每个参数拆分到单独行。
验证效果
修改后的配置处理后,代码会自动转换为你期望的格式,且对齐方式保持一致。
内容的提问来源于stack exchange,提问作者Łukasz Baran
相关产品推荐
相关产品推荐

