防止 clang-format 将多行 if 语句折叠成一行

Prevent clang-format from collapsing multi-line if statements into a single line

使用默认设置的 clang-format,如下:

if ((exprA) && 
    (exprB))

变成:

if ((exprA) && (exprB))

我试图防止将条件折叠成一行,但没有成功。
目前有办法实现吗?

在 clang 格式 documentation 中,BreakBeforeBinaryOperators 参数似乎最接近我所追求的:

BreakBeforeBinaryOperators (BinaryOperatorStyle)
The way to wrap binary operators.

  • BOS_None (in configuration: None) Break after operators.

但它似乎只在需要换行(超出列限制)时才会启动,这不是通常的情况。

根据Clang 10 document,您的要求可以完成。您必须对您的 clang 文件进行这两项更改

  1. BraceWrapping:中设置AfterControlStatement: true
  2. 比设定后ColumnLimit: 1
output -: if ((exprA) &&
              (exprB))

如果您有任何疑问,可以在 Here 试试这个。但是问题是您的其他代码也将被格式化。

没有办法只能拆分if ((exprA) && (exprB))。如果任何人都可以为此创建一个补丁,那么就可以做到,但是为此创建一个补丁并不是那么容易。需要很多时间和精力。