是否可以使用
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 来实现这一目标吗?
clang-format
最近(3.7或3.8)获得了更多调整对齐的选项。我在问题中提出的问题仍然没有得到完全支持,但我们现在可以更接近一点:
AlignConsecutiveDeclarations: true
如上所示对齐声明。
不幸的是,对指针星号格式的控制似乎仍然有限,请参阅clang-format:将指针声明的星号(*)与变量名对齐
好吧,你可以靠近一下。
对于函数声明:
您可以设置
BinPackParameters=false
,这将强制函数声明的所有参数都在一行上或每个参数在不同的行上,并且它们将如您所示对齐。
(但类型和标识符之间不能使用制表位。据我所知,现在以 clang 格式这是不可能的。)
另外,请参阅选项
AllowAllParametersOfDeclarationOnNextLine
即使 BinPackParameters 为 false,也允许将函数声明的所有参数放在下一行。
对于结构体,我认为你无法实现这一点。
过去我自己为 clang-format 编写过补丁,我认为要像您建议的那样进行对齐需要做很多工作。您必须自己将相当多的 C++ 代码编写成 clang lib 格式才能支持这一点。
跟进您的帖子,我得到以下信息:
struct
{
int alpha;
unsigned int beta;
MyObject * gamma;
};
void foobar( int alphaXXXXXXXXXX,
unsigned int betaXXXXXXXXX,
MyObject * gammaXXXXXXXX )
{
}
其中
BinPackArguments
和 BinPackParameters
均为 false,并且 AlignConsecutiveAssignments
和 AlignConsecutiveDeclarations
均设置为 true(这些参数的文档)。我必须将变量的长度扩展到函数,因为原始变量可以在一行中容纳所有变量。