如何让clang格式的c ++渴望循环成三行?

时间:2018-08-03 09:31:52

标签: c++ clang-format

我希望将任何 long for循环自动分为三行;喜欢:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); 
         origin++)

但是Google样式的clang格式将其格式化为两行:

    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); origin++)

BinPackArguments选项将每个for循环分为三行,包括短行,这不是我想要的。

基于行宽,我只希望将占用X个字符以上的循环分成三行。小于等于{X个字符的循环,它们可以停留在一行上。我该如何实现?

1 个答案:

答案 0 :(得分:0)

我不确定BinPackArguments为什么对您不起作用。也许您还设置了其他样式选项?也许早期(或更高版本)的clang格式工作方式不同?我使用了clang格式6.0.0来验证此答案中的行为。

我完全能满足您的要求:

BinPackArguments: false

例如,给定包含以下内容的myfile.cpp:

int f()
{
    for (auto origin = backup_to_origins[peer].begin();
         origin != backup_to_origins[peer].end(); 
         origin++)
    {
    }
    for (auto o = b.begin();
         o != b.end();
         o++)
    {
    }
}

命令行clang-format -style='{BasedOnStyle: Google,BinPackArguments: false}' myfile.cpp产生以下输出:

int f() {
  for (auto origin = backup_to_origins[peer].begin();
       origin != backup_to_origins[peer].end();
       origin++) {
  }
  for (auto o = b.begin(); o != b.end(); o++) {
  }
}

您引用的行长XColumnLimit样式选项控制,该选项通常默认为80。

有关这些样式选项的更多详细信息,请参见documentation