嵌套结构字段的 Clang 格式规则

Clang Format Rule for Nested Struct Fields

哪个 clang format style option 控制 clang 如何格式化嵌套的结构字段?如果没有,是否有以下已知的解决方法?

考虑以下假程序

void main()
{
    /* ... */
    struct_type thing = {
        .foo = foo,
        .params =
            {
                .start = {.stamp = 1, .when = 1},
                .url = "https://httpbin.org/",
            },
    };
}

我们有一些安装了 clang-format 3.8 的旧构建环境。当我们在上面的程序中 运行 clang-format 时,嵌套的结构字段在同一行结束

$ clang-format sample.c 

/* ... */
      .params =
          {
              .start = {.stamp = 1, .when = 1}, .url = "https://httpbin.org/",
          },
/* ... */

但是,当使用 clang-format 6.0.0 时,这些嵌套字段最终会出现在不同的行中。

$ clang-format sample.c 

/* ... */

      .params =
          {
              .start = {.stamp = 1, .when = 1},
              .url = "https://httpbin.org/",
          },
/* ... */

}

这里有人知道哪些(如果有的话)clang 格式样式规则控制这个以及这些规则在哪些版本中可用?

通常,clang-format 会将结构字段放在不同的行上,如在原始代码中和在 clang-format-6.0 的输出中一样。

我找不到明确控制它的选项。

然而,clang-format-3.8 强制字段在同一行似乎是一个错误。
有一个名为 BreakBeforeBinaryOperators 的字段,它控制二元运算符的包装(请参阅 clang-format 3.8 documentation)。该字段默认为 None,它告诉 clang-format 不要在二元运算符之前中断。问题是,clang-format 错误地将这个具有两个字段的结构识别为二元运算符...

因此,要解决 clang-format 3.8 的问题,请将 BreakBeforeBinaryOperators 设置为 All。这将产生改变二元运算符换行方式的副作用,但希望这是可以接受的(因为二元表达式超出列限制的情况可能并不常见)。

希望对您有所帮助。
顺便说一句,我通过比较 3.8 和 3.8 的 --dump-config 输出与 -style=webkit 发现了这一点,一旦我意识到 webkit 样式没有那种错误的行为。