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

时间:2016-03-01 00:53:13

标签: c++ clang-format

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

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

BasedOnStyle: WebKit
AlignTrailingComments: true

这种方式clang-format应该对齐尾随的注释。

给定输入文件:

    /**
     * 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选项的选项?

3 个答案:

答案 0 :(得分:2)

AlignTrailingComments将连续行中的注释尾随代码对齐:

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

答案 1 :(得分:1)

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

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

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

我也不相信CommentPragmas会有所帮助。我敢肯定,这只会阻止clang-format向这些注释添加换行符,但不会阻止缩进更改。 (而且也没有真正记录下来。)无论如何,这里需要的是调整缩进,而不是单独进行,因此CommentPragmas似乎与需要的相反。 / p>

答案 2 :(得分:0)

可能的解决方法:将CommentPragmas与正则表达式一起使用,将这些注释标记为不可触及。