嵌套结构字段的 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 样式没有那种错误的行为。
哪个 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 样式没有那种错误的行为。