clang-format中#endif后尾随注释格式异常的解决方法
clang-format配置:让#endif后的尾随注释仅保留2个空格
问题场景
原始C代码:
#ifdef __UCOSII__ #define SCANCODE_HKEY1 SCANCODE_F1 ///< Horizontal key 1 #define SCANCODE_HKEY2 SCANCODE_F2 ///< Horizontal key 2 #define SCANCODE_HKEY3 SCANCODE_F3 ///< Horizontal key 4 #define SCANCODE_VKEY1 SCANCODE_1 ///< Vertical key 1 #define SCANCODE_VKEY2 SCANCODE_2 ///< Vertical key 2 #define SCANCODE_VKEY3 SCANCODE_3 ///< Vertical key 3 #endif // __UCOSII__
使用的clang-format配置片段:
... MaxEmptyLinesToKeep: 2 SpacesBeforeTrailingComments: 2 AlignTrailingComments: Kind: Always OverEmptyLines: 1 ...
格式化后,宏定义的注释对齐正常,但#endif后的尾随注释被自动对齐到与宏注释同一列,不符合仅保留2个空格的需求:
#ifdef __UCOSII__ #define SCANCODE_HKEY1 SCANCODE_F1 ///< Horizontal key 1 #define SCANCODE_HKEY2 SCANCODE_F2 ///< Horizontal key 2 #define SCANCODE_HKEY3 SCANCODE_F3 ///< Horizontal key 4 #define SCANCODE_VKEY1 SCANCODE_1 ///< Vertical key 1 #define SCANCODE_VKEY2 SCANCODE_2 ///< Vertical key 2 #define SCANCODE_VKEY3 SCANCODE_3 ///< Vertical key 3 #endif // __UCOSII__
解决方案
只需在.clang-format配置中添加PPTrailingCommentAlignment: false选项即可实现需求。
说明
PPTrailingCommentAlignment默认值为true,会让预处理指令(如#endif、#ifdef)的尾随注释参与全局对齐;- 设置为
false后,预处理指令的尾随注释将不再对齐,而是遵循SpacesBeforeTrailingComments指定的空格数。
修改后的配置片段
... MaxEmptyLinesToKeep: 2 SpacesBeforeTrailingComments: 2 AlignTrailingComments: Kind: Always OverEmptyLines: 1 PPTrailingCommentAlignment: false ...
格式化后的效果
#ifdef __UCOSII__ #define SCANCODE_HKEY1 SCANCODE_F1 ///< Horizontal key 1 #define SCANCODE_HKEY2 SCANCODE_F2 ///< Horizontal key 2 #define SCANCODE_HKEY3 SCANCODE_F3 ///< Horizontal key 4 #define SCANCODE_VKEY1 SCANCODE_1 ///< Vertical key 1 #define SCANCODE_VKEY2 SCANCODE_2 ///< Vertical key 2 #define SCANCODE_VKEY3 SCANCODE_3 ///< Vertical key 3 #endif // __UCOSII__
这样既保留了宏定义注释的对齐效果,又让#endif后的注释仅保留2个空格。
内容的提问来源于stack exchange,提问作者XiaoLey
相关产品推荐
相关产品推荐

