防止 clang-format 将多行 if 语句折叠成一行
Posted
技术标签:
【中文标题】防止 clang-format 将多行 if 语句折叠成一行【英文标题】:Prevent clang-format from collapsing multi-line if statements into a single line 【发布时间】:2018-06-23 04:03:22 【问题描述】:使用默认设置的 clang-format,如下:
if ((exprA) &&
(exprB))
变成:
if ((exprA) && (exprB))
我试图防止将条件折叠成一行,但没有成功。 目前有没有办法做到这一点?
在 clang 格式 documentation 中,BreakBeforeBinaryOperators
参数似乎最接近我所追求的:
BreakBeforeBinaryOperators(BinaryOperatorStyle) 二元运算符的包装方式。
BOS_None(配置中:None
)在运算符后中断。
但它似乎只在需要换行时才起作用(超出列限制),这不是通常的情况。
【问题讨论】:
一种解决方法是在第一行的末尾添加注释。 clang-format 不会加入这些行。 您也可以将ColumnLimit设置为0。见***.com/questions/33656800/clang-format-line-breaks/… 感谢@ambiso 的有用提示!不幸的是,更改源代码是不可行的,因为这种格式分布在整个应用程序中。将列限制设置为 0 确实有效,但会产生一些不希望的副作用,例如弄乱 c'tor 参数的对齐方式(可以通过一些调整来修复)。从那时起它也并不理想,没有强制执行列限制,但它仍然比我到目前为止所拥有的更进一步。 @ambiso 您能否将您的 cmets 格式化为答案,并可能扩展一下?这样,如果在赏金到期时没有其他答案,我可以奖励你。 【参考方案1】:根据Clang 10 document,您的请求可以完成。您必须对您的 clang 文件进行这两项更改
-
在
BraceWrapping:
中设置AfterControlStatement: true
。
设置后ColumnLimit: 1
output -: if ((exprA) &&
(exprB))
如果您有任何疑问,您可以在Here 试试这个。但问题是您的其他代码也会被格式化。
没有办法只拆分if ((exprA) && (exprB))
。如果任何人都可以为此创建补丁,则可以做到,但为此创建补丁并不容易。这需要大量的时间和精力。
【讨论】:
感谢您的提醒和有用的网站!以上是关于防止 clang-format 将多行 if 语句折叠成一行的主要内容,如果未能解决你的问题,请参考以下文章
clang-format 覆盖 WebKit 样式的多行注释