clang-format:如何防止下一行的所有函数参数?

时间:2016-07-28 11:31:48

标签: c++ clang-format

我有一个C ++函数调用,我手动和故意格式化 这样:

DoSomethingForAPurposeThatCausesALongFunctionName(
    arg_0,
    arg_1,
    arg_2);

clang-format想要像这样重新格式化:

DoSomethingForAPurposeThatCausesALongFunctionName(
    arg_0, arg_1, arg_2)

我不想要这个。 AllowAllParametersOfDeclarationOnNextLine似乎 控制函数声明的这种行为,但函数调用呢? 有没有相应的设置?

我的.clang-format看起来像这样:

BasedOnStyle: Google
BinPackArguments: false
BinPackParameters: false
AllowAllParametersOfDeclarationOnNextLine: false
AlignAfterOpenBracket: AlwaysBreak

4 个答案:

答案 0 :(得分:1)

我还想防止在同一行上但在fun(行之下的多个参数。就我而言,我不介意第一个参数是否仍与fun(在同一行。我只希望它们要么全部排在fun(上,要么全部堆叠。

我能够通过将PenaltyBreakBeforeFirstCallParameter增加到100来实现这一目标。 可能根据其他惩罚设置可能需要一个不同的值。

这将产生:

fun(my_long_argument_0,
    my_long_argument_1,
    my_long_argument_2);

在您的情况下,假设DoSomethingForAPurposeThatCausesALongFunctionName(arg_0,对于一行而言太长,它将产生:

DoSomethingForAPurposeThatCausesALongFunctionName(
    arg_0,
    arg_1,
    arg_2);

答案 1 :(得分:0)

以下配置正确,可以使用clang-format 5.0获得所需的格式。

AlignAfterOpenBracket: AlwaysBreak
AllowAllParametersOfDeclarationOnNextLine: false
BinPackParameters: false

答案 2 :(得分:0)

a similar question 投票结果最高的答案中的解决方案对我有效,

尝试设置:

BinPackArguments: false
BinPackParameters: false

并确保

ExperimentalAutoDetectBinPacking: false
AllowAllParametersOfDeclarationOnNextLine: false

或未定义。

答案 3 :(得分:-1)

我认为你需要

AllowAllParametersOfDeclarationOnNextLine: true

它适用于我,除非第一个参数与函数调用位于同一行,在这种情况下,它将它们全部放在同一行。

我也有

ExperimentalAutoDetectBinPacking: false

可能会产生一些影响吗?

我使用的是3.8.0版本。