我正在尝试将clang-format引入我们正在使用的几个项目(C和C ++),但是我很难以我想要的方式使其格式化多行Doxygen注释。
所有注释具有相同的格式:
/*! @brief Some text
*
* Some more text
*
* @verbatim
*
* A very long line of text that exceeds the clang-format column width but should not be touched
*
* @endverbatim
*/
我想让clang格式不保留逐字记录块,而不要重排它们。我正在使用clang-format-6.0
关闭ReflowComments
是不可选项,因为非doxygen注释必须由clang格式处理
我尝试了CommentPragmas
配置项中的各种正则表达式,但无济于事:
@verbatim(.*\n)*.*@endverbatim
将整个逐字记录块视为注释语用。这是理想的情况,因为Doxygen评论的任何其他部分我都不介意分成多行。@brief(.*\n)+
以匹配整个注释块作为编译指示。我还尝试在注释的末尾使用任意标记来尝试此操作,以充当显式的块末标记。这不是理想的选择,因为它不会强制注释的非语言部分一致,但是如果需要的话,这是我愿意忍受的妥协。到目前为止,我设法使多行注释的第一行保持不变,如果它超出了列限制。但是,后面的任何长行仍然被打断。
我留在框中的唯一其他工具是在这些注释周围使用// clang-format off
和// clang-format on
,但我也想避免使用它,因为:
a)在整个代码库中添加它们将非常繁琐
b)我必须将所有注释用这些注释包围,而不仅仅是逐字记录块(我不知道是否可以仅对多行注释的一部分禁用它-我只管理了使它能在整个版本中正常运行,即使可能,在生成的Doxygen文档中最终也可能出现clang-format指令,这是不可接受的)]
c)我不太喜欢它在代码中的显示方式。
感谢您的帮助。谢谢。
也遇到此问题,发现的唯一解决方法是使用clang-format on/off
。
clang格式重排注释倾向于:
@page
,@section
等标题,以及从它们生成的链接(在极少数情况下。)>@startuml
块,具有特定的语法。@verbatim
块。请参阅MySQL中的用法示例:https://github.com/mysql/mysql-server/blob/8.0/storage/perfschema/pfs.cc
更新:
[以clang格式本身提交了功能请求:https://bugs.llvm.org/show_bug.cgi?id=44486