clang-format:如果参数不合适,总是中断?

Posted

技术标签:

【中文标题】clang-format:如果参数不合适,总是中断?【英文标题】:clang-format: always break if params don't fit? 【发布时间】: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 之后,我议程上的下一件事是研究如何按照您的描述配置函数参数延续。需要深入研究一下,看看是否有扩展可配置性的好方法。 【参考方案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 page 的clang-format 3.4,似乎很遗憾没有此配置选项。这为您提供了两种选择:

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

【讨论】:

以上是关于clang-format:如果参数不合适,总是中断?的主要内容,如果未能解决你的问题,请参考以下文章

clang-format:如果语句溢出,则强制参数和参数为一行

clang-format 堆栈所有 if 语句参数(如果它们太长)

win7屏幕分辨率总是自动切换

如果第一个条件为假,假设 if-and 语句总是会中断是不是安全? [复制]

clang-format 如何不将 if 语句放在一行中?

如果debug调试的时候中断总是停在析构函数的delete[] p上