如何设置clang-format注释编译指示,使多行doxygen注释不会被格式化?

4

我正在尝试将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-format 保留 verbatim 块并不对其进行重新格式化。我正在使用 clang-format-6.0。
关闭 `ReflowComments` 不是一个选项,因为 clang-format 必须处理非 Doxygen 注释。
我已经尝试了各种正则表达式在 `CommentPragmas` 配置项中,但都无济于事:
- 使用 `@verbatim(.*\n)*.*@endverbatim` 将整个 verbatim 块作为注释 pragma 处理。这是理想的情况,因为我不介意 Doxygen 注释的任何其他部分被拆成多行。 - 使用 `@brief(.*\n)+` 匹配整个注释块作为 pragma。我还尝试了在注释结尾加上一个任意标记来充当显式的块结束标记。这不是理想的,因为它不能迫使注释的非 verbatim 部分符合要求,但如果必须这样做,则我愿意接受这种妥协。 - 还有其他一些我在其他讨论中看到过的正则表达式,可以适应我们的 Doxygen 标记。
到目前为止,我所能做的就是让 clang-format 保留多行注释的第一行,如果它超过列限制。然而,任何后续的长行仍然会被拆分。
唯一剩下的工具是在这些注释周围使用 `// clang-format off` 和 `// clang-format on`,但我想尽量避免这样做,因为:
- 在整个代码库中添加它们会很麻烦。 - 我必须将整个注释都用上述指令括起来,而不仅仅是 verbatim 块(我还没有弄清楚是否可以仅对多行注释的一部分禁用 clang-format,我只成功地让它适用于整个注释。而且,即使这是可能的,clang-format 指令也最终会出现在生成的 Doxygen 文档中,这是不可接受的)。 - 我真的不喜欢它在代码中的外观。
感谢任何帮助。谢谢。

你在使用doxygen或clang编译器时遇到了问题吗?如果是doxygen的问题,请提供您正在使用的doxygen版本以及与默认配置不同的doxygen配置文件中的设置(对于较新的doxygen版本,请使用“doxygen -x”命令)。 - albert
2
不,这与doxygen或clang编译器完全无关。我只是希望clang-format保留我的doxygen注释的一部分,而不重新格式化它们。Doxygen生成工作正常,其中一个目标是在运行格式化程序后不影响生成的输出。我已经尝试通过问题使这一点明显,但如果您认为不清楚,我可以进一步澄清。 - Pesho_T
1个回答

1

@albert,FYI,请查看clang-format功能请求,如果您想要关注它。 - Marc Alff
感谢提供功能请求的链接。在各个地方放置开/关非常麻烦。我不知道这些命令是什么样子的。看起来很遗憾,只有"clang-format on"和"clang-format off",没有像@那样明确的“命令”设置器,但如果它像@clang-format ...一样,那么通过@noop命令在doxygen 1.8.17中重新定义就很容易了。 - albert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接