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

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

具有以下结构定义:

struct city
{
};
struct country
{
};

我想要 clang-format 为我格式化它,就像

struct city {};
struct country {};

我怎样才能实现这个目标?

我可以看到很多选项,例如

AllowShortBlocksOnASingleLine
AllowShortFunctionsOnASingleLine
AllowShortIfStatementsOnASingleLine
,但没有
AllowShortClassDefinitionsOnASingleLine
(或类似的)。

c++ formatting clang-format
3个回答
7
投票

遗憾的是,从 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 样式选项


0
投票

这样就可以了。

BreakBeforeBraces: Attach

或者您可以尝试设置

BreakBeforeBraces: Custom

并玩弄

BraceWrapping
。 不过,这个选项对我来说不起作用。


0
投票

我能做的最好的事情就是暂时关闭 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);
© www.soinside.com 2019 - 2024. All rights reserved.