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: 80
或ColumnLimit: 120
。可能您可以这样做一次,然后切换回您通常的ColumnLimit: 0
- 但是设置一次列限制可能会更改许多代码行的格式,当您将列限制更改回零时,这些格式将不会恢复,所以可能不是你想要的。
AlignTrailingComments
与此无关。正如另一个答案所解释的,这是为了在代码行末尾对齐尾随 cmets。有关详细信息,请参阅documentation。
我也不相信CommentPragmas
会有所帮助。我很确定这只会阻止clang-format
向这些 cmets 添加换行符,但不会阻止缩进更改。 (这也没有真正记录下来。)无论如何,这里需要的是调整缩进,而不是不管它,所以CommentPragmas
似乎与所需要的相反。
【讨论】:
【参考方案3】:一种可能的解决方法:使用带有正则表达式的CommentPragmas
将这些 cmets 标记为不可触摸。
【讨论】:
其实OP的问题正好相反。他的 cmets 并没有像他想要的那样不缩进。在任何情况下,CommentPragmas
都不会禁用缩进,只会禁用换行等其他内容。以上是关于clang-format 覆盖 WebKit 样式的多行注释的主要内容,如果未能解决你的问题,请参考以下文章