具有以下结构定义:
struct city
{
};
struct country
{
};
我想要 clang-format 为我格式化它,就像
struct city {};
struct country {};
我怎样才能实现这个目标?
我可以看到很多选项,例如
AllowShortBlocksOnASingleLine
、AllowShortFunctionsOnASingleLine
或 AllowShortIfStatementsOnASingleLine
,但没有 AllowShortClassDefinitionsOnASingleLine
(或类似的)。
遗憾的是,从 clang-format 12 开始,您需要的单个功能已缺失。
也就是说,如果您希望空结构/类位于一行中,那么您必须接受左花括号
{
始终与 struct
或 class
保持在同一行。为此,请设置
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: false
然后你就会有
class A {};
class B {
void foo() {}
};
如果你想实现类似的目标
class A {};
class B
{
void foo() {}
};
那么据我所知,clang-format 恐怕无法做到这一点。
我将在下面讨论一些相关选项。
首先,假设我们已经设置了
BreakBeforeBraces: Custom
如果没有这个,后面的所有选项都将被忽略。
那么,
BraceWrapping:
AfterClass: false
会导致
class Foo {
// data members and member functions
};
相比之下,
BraceWrapping:
AfterClass: true
会导致
class Foo
{
// data members and member functions
};
现在,给定
AfterClass
设置为 true
,然后 SplitEmptyRecord
确定是否将空类拆分为两行。
BraceWrapping:
SplitEmptyRecord: false
会导致
class EmptyClass
{};
同时
SplitEmptyRecord: true
会给你
class EmptyClass
{
};
遗憾的是,这些都不能具体解决您的问题。
有关参考,请参阅Clang-Format 样式选项
这样就可以了。
BreakBeforeBraces: Attach
或者您可以尝试设置
BreakBeforeBraces: Custom
并玩弄
BraceWrapping
。
不过,这个选项对我来说不起作用。
我能做的最好的事情就是暂时关闭 clang-format:
// clang-format off
struct city {};
struct country {};
// clang-format on
或者使用宏从 clang-format 中隐藏它:
#define EMPTY_STRUCT(x) struct x {}
EMPTY_STRUCT(city);
EMPTY_STRUCT(country);