【问题标题】:clang-format: how to prevent all function arguments on next line?clang-format:如何防止下一行的所有函数参数?
【发布时间】:2016-12-02 18:30:48
【问题描述】:

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

【问题讨论】:

标签: c++ clang-format


【解决方案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);

【讨论】:

    【解决方案2】:

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

    AlignAfterOpenBracket: AlwaysBreak
    AllowAllParametersOfDeclarationOnNextLine: false
    BinPackParameters: false
    

    【讨论】:

    • 同样的问题。已经有了建议的设置,clang-format 将所有参数保留在一行中。
    【解决方案3】:

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

    尝试设置:

    BinPackArguments: false
    BinPackParameters: false
    

    并确保

    ExperimentalAutoDetectBinPacking: false
    AllowAllParametersOfDeclarationOnNextLine: false
    

    或未定义。

    【讨论】:

      【解决方案4】:

      我觉得你需要

      AllowAllParametersOfDeclarationOnNextLine: true
      

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

      我也有

      ExperimentalAutoDetectBinPacking: false
      

      这可能有一些影响?

      我使用的是 3.8.0 版。

      【讨论】:

      • 这是不正确的,设置该参数对相关行为没有影响。
      • 你是对的 - 看起来它正在产生效果,但无论如何它都会做同样的事情。我发现它将它们全部放在不同的行上,除非第一个与左括号在同一行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多