【问题标题】:clang-format: always break if params don't fit?clang-format:如果参数不合适,总是中断?
【发布时间】:2014-03-24 20:41:51
【问题描述】:

我不知道是否可以将 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 无法做到这一点。对吗?

【问题讨论】:

  • 我们还需要clang-format标签,但我不能添加。
  • 我几乎需要同样的格式。当分成多行时,我想将第一个参数放在下一行,并带有一个缩进
  • 它正在格式化@KevlinHenney 提及以响应Seven Ineffective Coding Habits of Many Programmers 之一。
  • 确实!我昨晚才知道clang-format的存在,今天早上第一件事就是下载了它。在弄清楚如何在 vim 中映射到 ^K 之后,我议程上的下一件事是研究如何按照您的描述配置函数参数延续。需要深入研究一下,看看是否有扩展可配置性的好方法。

标签: clang clang-format


【解决方案1】:

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

AlignAfterOpenBracket: AlwaysBreak
BinPackArguments: false
BinPackParameters: false

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

【讨论】:

  • 这对参数(函数调用)很有用,你也有参数(函数声明)的解决方案吗?非常感谢!
【解决方案2】:

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

here 有最新版本的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 也太长,在这种情况下bbbccc 将在同一行。 IE。它在打开( 后中断,但随后尝试填充线条。它不会自动中断所有逗号。

查看corresponding pageclang-format 3.4,似乎很遗憾没有此配置选项。这为您提供了两种选择:

  1. 升级到更新版本的clang-format
  2. 不要。

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 2020-03-18
    • 2020-06-26
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 2020-02-03
    • 2015-06-11
    相关资源
    最近更新 更多