【问题标题】:How to let clang-format format c++ long for loop into three lines?如何让clang-format格式c++ long for循环成三行?
【发布时间】:2019-01-11 03:59:03
【问题描述】:

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

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

但是 google 风格的 clang-format 将其格式化为两行:

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

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

根据行宽,我只希望将占用大于X 字符数的循环分成三行。 X 字符的循环,它们可以保留在一行上。我怎样才能做到这一点?

【问题讨论】:

  • 我也有同样的问题。你找到答案了吗?

标签: c++ clang-format


【解决方案1】:

我不确定为什么 BinPackArguments 不适合你。也许您设置了其他样式选项?也许更早(或更高?)版本的 clang-format 工作方式不同?我使用 clang-format 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++) {
  }
}

您所指的行长X由ColumnLimit样式选项控制,通常默认为80。

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

【讨论】:

    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多