能否配置clang-format对齐switch中C++20 using enum与case的缩进?
clang-format中switch内using enum与case缩进对齐问题的处理
问题场景
C++20允许在switch块内使用using enum语句简化枚举成员的引用,示例代码如下:
switch (val) { using enum SomeEnum; case SomeValue: doSomething(val); case SomeOtherValue: doSomethingElse(val); default: break; }
当配置IndentCaseLabels: false(使case标签与switch保持同一缩进层级)时,clang-format 15和17版本会错误地缩进using enum语句,导致其与case标签的缩进不一致:
switch (val) { using enum SomeEnum; case SomeValue: doSomething(val); case SomeOtherValue: doSomethingElse(val); default: break; }
配置项现状
目前clang-format的官方配置选项中,没有专门针对switch块内using enum语句的缩进控制项,无法通过修改配置直接实现它与case标签的同层级对齐。
临时解决方法
若需临时规避该问题,可采用以下两种方式:
- 注释锁定格式:在
using enum语句前后添加clang-format的控制注释,强制跳过该部分的格式化:switch (val) { // clang-format off using enum SomeEnum; // clang-format on case SomeValue: doSomething(val); case SomeOtherValue: doSomethingElse(val); default: break; } - 提交官方修复请求:该问题属于clang-format对C++20新特性的支持疏漏,可在LLVM项目的issue跟踪系统中提交问题,推动官方修复此格式错误。
内容的提问来源于stack exchange,提问作者Destroy666
相关产品推荐
相关产品推荐

