【发布时间】:2015-12-30 15:57:57
【问题描述】:
我在我的.clang-format 文件中使用了BreakBeforeBraces: Allman,但控制语句中的大括号(例如if、for、while,...)没有放在自己的行中。
// Currently:
void foo()
{
while(true) {
bar();
}
}
// What I want:
void foo()
{
while(true)
{
bar();
}
}
I've read that 您可以在BraceWrapping 中为大括号设置嵌套配置类,但我无法找出正确的 YAML 语法(以及 sublime 文本插件的 JSON 语法),并且找不到任何现有示例。
有什么办法吗?
【问题讨论】:
-
当我在您的示例上运行
clang-format -i -style="{BreakBeforeBraces: Allman}" test.cpp时,它会将所有大括号放在自己的行上,就像您对 Allman 样式所期望的那样。你看到别的了吗? -
@RichardViney:你说得对……我做了一些测试,结果发现
AllowShortLoopsOnASingleLine: true是这个问题的罪魁祸首。将其设置为false可使格式化按预期工作。这是一个错误吗? -
不,我不认为这是一个错误,实际上还有其他样式选项,例如
AllowShortFunctionsOnASingleLine与BreakBeforeBraces: Allman一起使用时也会允许大括号有时并不总是有一行在特定条件下对自己。如果您想要超严格的 Allman 牙套,您还需要检查这些其他样式。 -
但是,例如,
AllowShortLoopsOnASingleLine选项是bool,并且只允许true或false。它确实会影响 Allman 大括号 (如原始问题所示),即使循环实际上并未转换为一行。 -
@RichardViney:我做了更多的测试并弄清楚了样式的组合 - 我打开了一个错误报告:llvm.org/bugs/show_bug.cgi?id=25069
标签: c++ formatting clang libclang clang-format