5

Is it possible to use clang-format to format struct members and function parameter names into columns?

For example:

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 '*'
{
}

If it's not possible, could I extend clang-format somehow to achieve this?

4

3 回答 3

4

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

AlignConsecutiveDeclarations: true

它对齐如上所示的声明。

不幸的是,指针星号格式的控制似乎仍然有限,请参阅clang-format:将指针声明的星号(*)与变量名对齐

于 2016-07-15T09:49:02.473 回答
2

好吧,你可以靠近。

对于函数声明:

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

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

另请参阅选项AllowAllParametersOfDeclarationOnNextLine

即使 BinPackParameters 为假,也允许将函数声明的所有参数放到下一行。

对于结构,我认为您无法做到这一点。

过去我自己为 clang-format 编写了补丁,我认为要像您建议的那样获得对齐将是很多工作。您必须自己将一些 C++ 编写成 clang lib 格式来支持这一点。

于 2015-09-20T17:52:05.627 回答
1

跟进您的帖子,我可以获得以下信息:

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

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

withBinPackArgumentsBinPackParameters都为假,AlignConsecutiveAssignments并且AlignConsecutiveDeclarations都设置为真(这些参数的文档)。我不得不将变量的长度扩展到函数,因为原来的可以将它们全部放在一行上。

于 2018-01-23T17:12:16.753 回答