如何允许clang-format在一行上格式化空类/结构?

时间:2016-12-12 14:23:34

标签: c++ formatting clang-format

具有以下结构定义:

struct city
{
};
struct country
{
};

我希望clang-format为我格式化

struct city {};
struct country {};

我怎样才能做到这一点?

我可以看到许多选项,例如AllowShortBlocksOnASingleLineAllowShortFunctionsOnASingleLineAllowShortIfStatementsOnASingleLine,但没有AllowShortClassDefinitionsOnASingleLine(或类似)。

2 个答案:

答案 0 :(得分:2)

遗憾的是,从 clang-format 12 开始,您需要的个别功能已缺失。

也就是说,如果您希望一个空的结构体/类在一行中,那么您必须接受左花括号 { 始终与 struct 或 { 保持在同一行{1}}。为此,设置

class

然后你就会有

BreakBeforeBraces: Custom
BraceWrapping:
  AfterClass: false

如果你想实现类似的东西

class A {};

class B {
  void foo() {}
};

据我所知,恐怕 clang-format 无法做到这一点。


我将在下面讨论一些相关的选项。

首先,假设我们已经设置了

class A {};

class B 
{
  void foo() {}
};

没有这个,后面的所有选项都会被忽略。

那么,

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

遗憾的是,这些都没有专门解决您的问题。

参考Clang-Format Style Options

答案 1 :(得分:0)

这样就可以了。

BreakBeforeBraces: Attach

或者您可以尝试设置

BreakBeforeBraces: Custom

并使用BraceWrapping。 不过,这个选项对我不起作用。