clang-format 15.0.6:如何阻止拆分域分隔符(::)?求对应配置
Clang-format 15.0.6 代码格式化问题解决方案
问题场景
使用clang-format 15.0.6时,方括号内作用域解析符号::后的标识符被强制换行缩进,不符合预期格式:
实际格式化结果
auto amount = msg[AAAAAAAAAAAAAAAAAAAAAAAAA:: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb] .get<double>();
期望格式化结果
auto amount = msg[AAAAAAAAAAAAAAAAAAAAAAAAA::bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb] .get<double>();
当前Break相关配置
AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: MultiLine BreakBeforeBinaryOperators: None BreakBeforeConceptDeclarations: Always BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true ObjCBreakBeforeNestedBlockParam: true PenaltyBreakAssignment: 2 PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakOpenParenthesis: 0 PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10
调整方案
需要添加或修改以下配置项:
添加
PenaltyBreakScope并设置高值
该配置控制在作用域解析符::前后换行的惩罚权重,值越高,clang-format越倾向于避免在::附近拆分换行。建议设置为:PenaltyBreakScope: 1000检查并调整
ColumnLimit(可选)
如果当前ColumnLimit设置过小,导致clang-format因列宽限制不得不拆分长标识符,可适当调大该值,或设置为0关闭列宽限制:ColumnLimit: 120 # 根据实际需求调整,设为0则无列宽限制
调整后,clang-format会优先将::前后的标识符保持在同一行,匹配你期望的格式化效果。
内容的提问来源于stack exchange,提问作者q0987
相关产品推荐
相关产品推荐

