7

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

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

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

4

3 回答 3

2

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

int short;        // short
int longlonglong; // long
于 2016-11-22T23:51:45.293 回答
2

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

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

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

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

于 2020-08-16T16:46:01.657 回答
0

一种可能的解决方法:使用CommentPragmas正则表达式将这些评论标记为不可触碰。

于 2016-11-28T16:46:44.913 回答