clang格式:如何防止所有函数参数出现在下一行

clang-format: how to prevent all function arguments on next line?

本文关键字:一行 参数 格式 何防止 函数 clang      更新时间:2023-10-16

我有一个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

我还感兴趣的是防止多个参数在同一行上,但在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);

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

AlignAfterOpenBracket: AlwaysBreak
AllowAllParametersOfDeclarationOnNextLine: false
BinPackParameters: false

一个类似问题的最高投票答案中的解决方案为我工作,

尝试设置:

BinPackArguments: false
BinPackParameters: false

并确保

ExperimentalAutoDetectBinPacking: false
AllowAllParametersOfDeclarationOnNextLine: false

或未定义。

我想你需要

AllowAllParametersOfDeclarationOnNextLine: true

它对我有效,除非第一个参数与函数调用在同一行,在这种情况下,它会将它们全部放在同一线上。

我也有

ExperimentalAutoDetectBinPacking: false

这可能会产生一些影响?

我使用的是3.8.0版本。