29

我不知道是否可以将 clang-format 配置为在参数不适合时始终中断,即:

// Try this first:
SomeCall(aaa, bbb, ccc);

// If doesn't fit, try this:
SomeCall(
     aaa, bbb, ccc);

// If still doesn't fit, do NOT try this:
SomeCall(aaa, bbb,
         ccc);

// and NOT this:
SomeCall(aaa,
         bbb,
         ccc);

// but immediately do this:
SomeCall(
     aaa,
     bbb,
     ccc);

到目前为止,我已经得出结论,使用 clang-format 3.4 是不可能做到这一点的。这是对的吗?

4

2 回答 2

10

在较新版本的 clang-format 中,现在可以通过以下方式实现:

AlignAfterOpenBracket: AlwaysBreak
BinPackArguments: false
BinPackParameters: false

有关这些选项的完整说明,请参阅https://clang.llvm.org/docs/ClangFormatStyleOptions.html

于 2017-11-03T13:32:17.413 回答
1

不幸的是,我只能访问clang-format3.8.0 (" clang-format version 3.8.0 (tags/RELEASE_380/final)"),所以我无法轻松地对 3.4 版进行测试。

这里clang-format有一个最新版本的手册,我不知道你是否找到了。它链接到Clang-Format Style Options列表。在那里,有一个样式选项与您的问题标题相呼应:如果参数不适合单行,则始终在左括号后中断。AlignAfterOpenBracket: AlwaysBreak

要使用它,请将以下内容放入您的~/.clang-format文件中:

AlignAfterOpenBracket: AlwaysBreak

经过一些测试,它似乎几乎完全按照您的意愿行事。

它格式化

SomeCall(aaa, bbb, ccc);

作为

SomeCall(
  aaa, bbb,
  ccc);

如果aaa, bbb, ccc不适合一行。它不会在和之间中断aaabbb直到aaa太长,在这种情况下bbb,和ccc将在同一行。即它在打开后中断(,但随后尝试填充线条。它不会自动中断所有逗号。

查看 3.4 的相应页面clang-format看起来好像这个配置选项很遗憾不存在。这使您有两个选择:

  1. 升级到更新版本的clang-format.
  2. 不。
于 2016-06-20T16:48:03.153 回答