如何配置clang-format使C++ requires表达式保持单行格式
clang-format 14/15 保持短requires表达式单行配置方案
示例代码:
if constexpr (requires { { N::uuid() } -> std::convertible_to<score::uuid_t>; })
clang-format 14、15版本默认会强制将上述短代码拆分为5行形式,格式化结果不符合预期。无需逐行添加格式化控制注释,通过修改.clang-format配置文件即可让短requires表达式始终保持单行显示,配置方法如下:
- 核心配置参数
在C++语言对应的配置段添加或修改以下参数:Language: Cpp # 允许短requires表达式整体单行显示 AllowShortRequiresExpressionsOnASingleLine: true # 控制requires子句与前置constexpr/concept等关键字保持同行 RequiresClausePosition: SameLine # 关闭requires表达式体的额外缩进,避免触发强制换行逻辑 IndentRequires: false # 自定义大括号换行规则,requires子句后的大括号不强制换行 BreakBeforeBraces: Custom BraceWrapping: AfterRequiresClause: false # 调高括号内换行的惩罚权重,避免无意义拆分短表达式 PenaltyBreakParentheses: 1000 # 根据团队代码规范设置足够的列宽,避免短表达式因列宽超限被强制拆分 ColumnLimit: 120 - 兼容说明
上述配置全局生效,不需要在业务代码中插入// clang-format off/// clang-format on类的注释控制。长度超过ColumnLimit的长requires表达式依然会按规则自动换行,不会影响长代码的可读性。
如果使用的是小版本较低的clang-format 14,暂未支持AllowShortRequiresExpressionsOnASingleLine配置项,可以额外添加AllowShortBlocksOnASingleLine: Always参数,同样可以实现短requires表达式不被拆分的效果。
内容的提问来源于stack exchange,提问作者Jean-Michaël Celerier
相关产品推荐
相关产品推荐

