如何以 clang 格式对齐函数参数名称?

How can I align function parameter names in clang-format?

是否可以使用 clang-format 将结构成员和函数参数名称格式化为列?

例如:

struct
{
   int           alpha; //aligned to 'b' of "beta"
   unsigned int  beta;
   MyObject     *gamma; //aligned with 'g' not '*'
};

void foobar (int           alpha, //aligned to 'b' of "beta"
             unsigned int  beta
             MyObject     *gamma) //aligned with 'g' not '*'
{
}

如果不可能,我可以通过某种方式扩展 clang-format 来实现吗?

嗯,可以近距离接触了

对于函数声明:

您可以设置BinPackParameters=false,这将强制函数声明的所有参数在一行或每个在不同的行,并且它们将按照您显示的方式对齐。

(但在类型和标识符之间没有制表位。现在 afaik 在 clang 格式中这是不可能的。)

另请参阅选项 AllowAllParametersOfDeclarationOnNextLine

Allow putting all parameters of a function declaration onto the next line even if BinPackParameters is false.

对于结构,我不认为你能做到这一点。

我自己过去曾为 clang-format 编写过补丁,我认为要像您建议的那样进行对齐需要做很多工作。您必须自己将相当多的 C++ 编写成 clang lib 格式才能支持这一点。

clang-format 最近(3.7 或 3.8)获得了更多调整对齐的选项,我在问题中提出的问题仍未得到完全支持,但我们现在可以更接近一点:

AlignConsecutiveDeclarations: true

如上所示对齐声明。

不幸的是,指针星号的格式控制似乎仍然有限,请参阅

根据您的 post,我得到以下信息:

struct
{
  int          alpha;
  unsigned int beta;
  MyObject *   gamma;
};

void foobar( int          alphaXXXXXXXXXX,
             unsigned int betaXXXXXXXXX,
             MyObject *   gammaXXXXXXXX )
{
}

with BinPackArguments and BinPackParameters both false, and AlignConsecutiveAssignments and AlignConsecutiveDeclarations both set to true (documentation of these parameters).我不得不将变量的长度扩展到函数中,因为原始函数可以将所有变量都放在一行中。