Clang格式链接其他ifs在单行上

时间:2018-05-02 20:24:07

标签: c++ clang-format

我试图编写一个允许以下内容的.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; }

我已经尝试了我能找到的与break和allowShort *相关的​​每个选项,无论我做什么,它似乎都会在第一个之后将它们分成多行:

if (value.Is<bool>()) { index = 1; }
else if (value.Is<int>()) {
  index = 2;
}
...

我是否有一些可以支持此选项的选项?

1 个答案:

答案 0 :(得分:1)

不幸的是,if-else语句目前不支持这种情况,仅适用于简单的if(自修订版329373,约会6/4/18)。 AllowShortBlocksOnASingleLineAllowShortIfStatementsOnASingleLine选项不适用于if-else语句。

希望将来会改变。

doc对此并不明确,说AllowShortIfStatementsOnASingleLine将允许单行上的简单if语句:

  

AllowShortIfStatementsOnASingleLine(bool)
      如果为true,则if (a) return;可以放在一行上。

但是,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的plain if语句与它们的块在一行上,例如:

verifyFormat("if (true) {\n"
             "  f();\n"
             "} else {\n"
             "  f();\n"
             "}",
  AllowSimpleBracedStatements);