基于Microsoft风格配置clang-format实现指定代码格式化效果
基于Microsoft风格的clang-format配置问题解答
问题背景
我基于Microsoft风格使用clang-format,已在配置文件中设置BinPackParameters = false、BinPackArguments = false、ColumnLimit = 120。
现有未格式化代码:
ClassObj = new ClassName(status, pixel_selection, options, error, argument1, argument2, argument3, argument4, argument5);
期望格式化后效果:等号后不换行,每个函数参数单独换行,格式如下:
ClassObj = new ClassName(status, pixel_selection, options, error, argument1, argument2, argument3, argument4, argument5);
当前遇到的问题:默认配置下等号后会换行;添加PenaltyBreakAssignment和PenaltyBreakBeforeFirstCallParameter参数后,仅在函数括号后换行,但参数仍未单独分行。想知道基于Microsoft风格能不能实现期望的格式化效果?
解答
可以实现。你需要在现有配置基础上调整以下参数:
PenaltyBreakAssignment:设一个极高的值(比如10000),让clang-format尽可能避免在赋值运算符处换行,确保=后紧跟new ClassName(...)不拆分。PenaltyBreakBeforeFirstCallParameter:设为较低值(比如0),允许在第一个参数后换行。AlignAfterOpenBracket:设置为Align,让后续参数和第一个参数的起始位置对齐,匹配你期望的格式。
最终的关键配置项示例:
BasedOnStyle: Microsoft BinPackParameters: false BinPackArguments: false ColumnLimit: 120 PenaltyBreakAssignment: 10000 PenaltyBreakBeforeFirstCallParameter: 0 AlignAfterOpenBracket: Align
测试这个配置后,就能得到你想要的格式:等号后不换行,每个参数单独一行且对齐。
内容的提问来源于stack exchange,提问作者Bob from IT
相关产品推荐
相关产品推荐

