Clang 格式在单行上链接 else ifs
Clang Format chained else ifs on single lines
我正在尝试编写一个允许以下内容的 .clang 格式文件:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) { index = 2; }
else if (value.Is<unsigned int>()) { index = 3; }
else if (value.Is<long long>()) { index = 4; }
else if (value.Is<unsigned long long>()) { index = 5; }
else if (value.Is<float>()) { index = 6; }
else if (value.Is<double>()) { index = 7; }
else if (value.Is<long double>()) { index = 8; }
else if (value.Is<std::string>()) { index = 9; }
else if (value.IsArray()) { index = 10; }
else { index = 0; }
我已经尝试了所有我能找到的与 breaks 和 allowShort* 相关的选项,而且无论我做什么,它似乎都会在第一行之后将它们分成多行,如下所示:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) {
index = 2;
}
...
我是否缺少一些支持此功能的选项?
不幸的是,目前不支持 if-else 语句,仅支持简单的 if(截至修订版 329373,日期为 6/4/18)。 AllowShortBlocksOnASingleLine
和 AllowShortIfStatementsOnASingleLine
选项不适用于 if-else 语句。
希望这会在未来有所改变。
doc 对此没有明确说明,说 AllowShortIfStatementsOnASingleLine
将允许在一行中使用简单的 if 语句:
AllowShortIfStatementsOnASingleLine (bool)
If true, if (a) return;
can be put on a single line.
但是,clang 格式代码建议 if-else 块不允许出现在单行中:
1) UnwrappedLineFormatter.cpp, tryMergeSimpleControlStatement:
// Only inline simple if's (no nested if or else).
if (I + 2 != E && Line.startsWith(tok::kw_if) &&
I[2]->First->is(tok::kw_else))
return 0;
2) FormatTest.cpp, FormatShortBracedStatements 测试。
请注意测试参数,以及单元测试中预期的格式,else 始终位于其自己的行中,而没有 else 的普通 if 语句与其块位于同一行,例如:
verifyFormat("if (true) {\n"
" f();\n"
"} else {\n"
" f();\n"
"}",
AllowSimpleBracedStatements);
我正在尝试编写一个允许以下内容的 .clang 格式文件:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) { index = 2; }
else if (value.Is<unsigned int>()) { index = 3; }
else if (value.Is<long long>()) { index = 4; }
else if (value.Is<unsigned long long>()) { index = 5; }
else if (value.Is<float>()) { index = 6; }
else if (value.Is<double>()) { index = 7; }
else if (value.Is<long double>()) { index = 8; }
else if (value.Is<std::string>()) { index = 9; }
else if (value.IsArray()) { index = 10; }
else { index = 0; }
我已经尝试了所有我能找到的与 breaks 和 allowShort* 相关的选项,而且无论我做什么,它似乎都会在第一行之后将它们分成多行,如下所示:
if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) {
index = 2;
}
...
我是否缺少一些支持此功能的选项?
不幸的是,目前不支持 if-else 语句,仅支持简单的 if(截至修订版 329373,日期为 6/4/18)。 AllowShortBlocksOnASingleLine
和 AllowShortIfStatementsOnASingleLine
选项不适用于 if-else 语句。
希望这会在未来有所改变。
doc 对此没有明确说明,说 AllowShortIfStatementsOnASingleLine
将允许在一行中使用简单的 if 语句:
AllowShortIfStatementsOnASingleLine (bool)
If true,if (a) return;
can be put on a single line.
但是,clang 格式代码建议 if-else 块不允许出现在单行中:
1) UnwrappedLineFormatter.cpp, tryMergeSimpleControlStatement:
// Only inline simple if's (no nested if or else).
if (I + 2 != E && Line.startsWith(tok::kw_if) &&
I[2]->First->is(tok::kw_else))
return 0;
2) FormatTest.cpp, FormatShortBracedStatements 测试。
请注意测试参数,以及单元测试中预期的格式,else 始终位于其自己的行中,而没有 else 的普通 if 语句与其块位于同一行,例如:
verifyFormat("if (true) {\n"
" f();\n"
"} else {\n"
" f();\n"
"}",
AllowSimpleBracedStatements);