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
不适合一行。它不会在aaa
和bbb
之间中断,直到aaa
也太长,在这种情况下bbb
和ccc
将在同一行。 IE。它在打开(
后中断,但随后尝试填充线条。它不会自动中断所有逗号。
查看corresponding page 的clang-format
3.4,似乎很遗憾没有此配置选项。这为您提供了两种选择:
-
升级到更新版本的
clang-format
。
不要。
【讨论】:
以上是关于clang-format:如果参数不合适,总是中断?的主要内容,如果未能解决你的问题,请参考以下文章
clang-format:如果语句溢出,则强制参数和参数为一行
clang-format 堆栈所有 if 语句参数(如果它们太长)