如何配置.clang-format 格式化时不修改嵌套结构体原有格式
.clang-format配置修改方案
这个嵌套结构体数组被强制折行的问题,是clang-format默认的C++11花括号列表格式化规则导致的,按以下方式调整配置即可保留原有手写格式:
全局配置调整
在.clang-format文件中修改/添加以下配置项即可:
# 保留你原本使用的基础风格,例如LLVM/Google/Chromium/Mozilla均可 BasedOnStyle: 你原本用的基础风格 # 关闭C++11风格的花括号列表强制折行规则,适配C风格结构体初始化写法 Cpp11BracedListStyle: false # 关闭结构体数组自动列对齐,不覆盖你手动调整的对齐空格 AlignArrayOfStructures: None # 允许初始化列表元素按需打包在同一行 BinPackArguments: true # 允许短初始化列表整体放在同一行,不强制拆分元素 AllowAllArgumentsOnNextLine: true # 按日常习惯设置列宽,建议不低于80,避免短条目被误判折行 ColumnLimit: 120 # 调高折行惩罚值,减少无必要的单行拆分 PenaltyBreakBeforeFirstCallParameter: 100
单段代码豁免方案
如果不想改全局格式化规则,只需要保留这一个菜单数组的原有格式,直接在代码段上下加clang-format开关注释就行,标记区间内的代码会被格式化工具完全跳过,不会做任何排版修改:
// clang-format off struct NewMenu appMenu[] = { { NM_TITLE, "Project", 0 , 0, 0, 0 }, { NM_ITEM, "Open..", "O", 0, 0, (APTR)MID_ProjectOpenAnim }, { NM_ITEM, "Save", 0 , 0, 0, (APTR)MID_ProjectSave }, { NM_ITEM, "Save as..", "S", 0, 0, (APTR)MID_ProjectSaveAs }, { NM_ITEM, "Export", 0, 0, 0, 0 }, { NM_SUB, "IFF ILBM Sheet", 0, 0, 0, (APTR)MID_ProjectExportToIlbm }, { NM_SUB, "AMOS ABK", 0, 0, 0, (APTR)MID_ProjectExportToAbk }, { NM_ITEM, NM_BARLABEL, 0 , 0, 0, 0, }, { NM_ITEM, "About", 0 , 0, 0, (APTR)MID_ProjectAbout }, { NM_ITEM, NM_BARLABEL, 0 , 0, 0, 0, }, { NM_ITEM, "Quit", "Q", 0, 0, (APTR)MID_ProjectQuit }, { NM_TITLE, "Anim sheet", 0 , 0, 0, 0, }, { NM_ITEM, "Append..", 0 , 0, 0, (APTR)MID_SheetAppend }, { NM_ITEM, "Fit to raster (horiz.)", 0 , 0, 0, (APTR)MID_SheetFitToRaster }, { NM_TITLE, "Tools", 0 , 0, 0, 0, }, { NM_ITEM, "Print frame mask (planar)", "P", 0, 0, (APTR)MID_ToolsPrintFrameMask }, { NM_ITEM, "Print frame mask (interl.)", "I", 0, 0, (APTR)MID_ToolsPrintInterleavedFrameMask }, { NM_ITEM, "Print mask of whole picture", "M", 0, 0, (APTR)MID_ToolsPrintFullMask }, { NM_END, 0, 0 , 0, 0, 0, }, }; // clang-format on
你遇到的NM_BARLABEL对应条目被拆成每个元素占一行的情况,就是默认规则下clang-format判定该条目不符合装箱排版要求触发的强制折行,上述全局配置调整后就不会再出现这类无意义拆分。
内容的提问来源于stack exchange,提问作者phibel
相关产品推荐
相关产品推荐

