【发布时间】:2019-12-20 09:56:25
【问题描述】:
我正在尝试将 clang-format 引入我们工作中的几个项目(C 和 C++),但我无法让它以我想要的方式格式化多行 Doxygen cmets。
所有 cmets 格式相同:
/*! @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-format 单独保留逐字块而不是重排它们。我正在使用 clang-format-6.0
关闭 ReflowComments 不是一个选项,因为非 doxygen cmets 必须由 clang-format 处理
我在CommentPragmas 配置项中尝试了各种正则表达式,但无济于事:
-
@verbatim(.*\n)*.*@endverbatim将整个逐字块视为注释杂注。这是理想的情况,因为我不介意将 Doxygen 评论的任何其他部分分成多行。 -
@brief(.*\n)+匹配整个注释块作为编译指示。我还尝试在注释末尾使用任意标记来充当显式的块结束标记。这并不理想,因为它不会强制评论的非逐字部分符合,但如果必须,我愿意接受的妥协。 - 我在其他讨论中看到的各种其他正则表达式,已适应我们的 Doxygen 标记。
到目前为止,我所做的只是将多行注释的第一行放在一边,如果它碰巧超过了列限制。但是,任何后续的长线仍然被打断。
我剩下的唯一其他工具是在这些 cmets 周围使用 // clang-format off 和 // clang-format on,但如果可以的话,我想再次避免使用它,因为:
a) 在整个代码库中添加它们会很乏味
b) 我必须用这些来包围整个 cmets,而不仅仅是逐字块(我还没有弄清楚你是否可以只为多行注释的一部分禁用它 - 我只有设法让它为整个系统工作,即使这是可能的,clang-format 指令最终会出现在生成的 Doxygen 文档中,这是不可接受的)
c) 我不太喜欢它在代码中的样子。
感谢任何帮助。谢谢。
【问题讨论】:
-
您在 doxygen 或 clang 编译器中有问题吗?如果 doxygen 出现问题,请您提及您正在使用的 doxygen 版本以及您的 doxygen 配置文件中与默认配置不同的设置(
doxygen -x用于较新的 doxygen 版本)。 -
不,这与 doxygen 或 clang 编译器完全无关。我只希望clang-format 不重新格式化我的 doxygen cmets 的一部分。 Doxygen 生成工作正常,其中一个目的是在运行格式化程序后不影响生成的输出。我试图用这个问题来说明这一点,但如果你认为不是,我可以尝试进一步澄清。
标签: c++ c doxygen clang-format