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

问题描述 投票:0回答:3

是否可以使用

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 来实现这一目标吗?

c clang clang-format
3个回答
5
投票

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

AlignConsecutiveDeclarations: true

如上所示对齐声明。

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


2
投票

好吧,你可以靠近一下。

对于函数声明:

您可以设置

BinPackParameters=false
,这将强制函数声明的所有参数都在一行上或每个参数在不同的行上,并且它们将如您所示对齐。

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

另外,请参阅选项

AllowAllParametersOfDeclarationOnNextLine

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

对于结构体,我认为你无法实现这一点。

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


1
投票

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

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

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

其中

BinPackArguments
BinPackParameters
均为 false,并且
AlignConsecutiveAssignments
AlignConsecutiveDeclarations
均设置为 true(这些参数的文档)。我必须将变量的长度扩展到函数,因为原始变量可以在一行中容纳所有变量。

© www.soinside.com 2019 - 2024. All rights reserved.