clang-format 覆盖 WebKit 样式的多行注释

Posted

技术标签:

【中文标题】clang-format 覆盖 WebKit 样式的多行注释【英文标题】:clang-format Overriding multi-line comments for WebKit style 【发布时间】:2016-06-13 06:28:46 【问题描述】:

我正在尝试使用 clang-format 来清理我的存储库中的代码。我们使用 WebKit 样式作为格式化的基础,但是我们也想确保多行 cmets 的格式正确。

据我了解,可以通过这样定义 .clang-format 文件来覆盖给定样式的格式规则:

BasedOnStyle: WebKit
AlignTrailingComments: true

这种方式 clang-format 应该对齐尾随 cmets。

给定输入文件:

    /**
     * This is a multi-line comment
     */
    void function() 
        /**
         * This is comment inside the function
         */
    

我的期望是以下输出

/**
 * This is a multi-line comment
 */
void function()

    /**
     * This is comment inside the function
     */

但是我得到的是:

/**
     * This is a multi-line comment
     */
void function()

    /**
         * This is comment inside the function
         */

我尝试将 Webkit 的格式化选项转储到 .clang 格式文件中,并将 AlignTrailingComments 从 false 更改为 true。这也没有什么不同。

Webkit 样式中是否存在干扰 AlignTrailingComments 选项的选项?

【问题讨论】:

来这里问同样的问题。我没有任何 BasedOnStyle 集,我认为 AlignTrailingComments 是不相关的(它适用于在一行代码之后以 // 开头的 cmets,不是吗?)。看起来像一个错误:块的开头对齐,但其余部分没有。 我也有同样的问题。而且这里的 3 个答案似乎都没有回答这个问题。 【参考方案1】:

AlignTrailingComments 对齐连续行中的 cmets 尾随代码:

int short;        // short
int longlonglong; // long

【讨论】:

【参考方案2】:

这里真正的问题是预定义的WebKit 样式设置ColumnLimit: 0。这以某种方式禁用了多行 cmets 的非第一行部分的缩进。 (而且这似乎没有记录在任何地方 - 我认为这是一个错误。)

一种解决方法是将列限制设置为合理的值,例如ColumnLimit: 80ColumnLimit: 120。可能您可以这样做一次,然后切换回您通常的ColumnLimit: 0 - 但是设置一次列限制可能会更改许多代码行的格式,当您将列限制更改回零时,这些格式将不会恢复,所以可能不是你想要的。

AlignTrailingComments 与此无关。正如另一个答案所解释的,这是为了在代码行末尾对齐尾随 cmets。有关详细信息,请参阅documentation。

我也不相信CommentPragmas 会有所帮助。我很确定这只会阻止clang-format 向这些 cmets 添加换行符,但不会阻止缩进更改。 (这也没有真正记录下来。)无论如何,这里需要的是调整缩进,而不是不管它,所以CommentPragmas 似乎与所需要的相反。

【讨论】:

【参考方案3】:

一种可能的解决方法:使用带有正则表达式的CommentPragmas 将这些 cmets 标记为不可触摸。

【讨论】:

其实OP的问题正好相反。他的 cmets 并没有像他想要的那样不缩进。在任何情况下,CommentPragmas 都不会禁用缩进,只会禁用换行等其他内容。

以上是关于clang-format 覆盖 WebKit 样式的多行注释的主要内容,如果未能解决你的问题,请参考以下文章

无法覆盖用户代理样式表中的边框间距

移动端页面默认样式重置

移动端一些默认样式调整

CSS - 原始与自定义样式表 - 覆盖样式的正确方法

直到刷新才应用 CSS 样式

将 clang-format 与 c++20 概念一起使用