【问题标题】:How to allow clang-format to format empty classes/structs on one line?如何允许 clang-format 在一行上格式化空类/结构?
【发布时间】:2016-12-12 14:23:34
【问题描述】:

具有以下结构定义:

struct city
{
};
struct country
{
};

我希望clang-format 为我设置格式

struct city {};
struct country {};

我怎样才能做到这一点?

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

【问题讨论】:

  • 您可以发布您的 clang 格式配置吗?它希望我们了解正在发生的事情。
  • 我也一直在徒劳地寻找这个。 AllowShortStructDefinitionsOnASingleLine 会很好。我用它来格式化短协议帧。

标签: c++ formatting clang-format


【解决方案1】:

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

也就是说,如果您希望空结构/类位于一行中,那么您必须接受左大括号{ 始终与structclass 保持在同一行中。为此,请设置

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 Style Options

【讨论】:

    【解决方案2】:

    这样就可以了。

    BreakBeforeBraces: Attach
    

    或者你可以尝试设置

    BreakBeforeBraces: Custom
    

    BraceWrapping一起玩。 不过,这个选项对我不起作用。

    【讨论】:

    • 这不是最好的解决方案,因为我仍然想要 class Sample { int a;};新行只有空类/结构:(
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2016-01-27
    • 1970-01-01
    • 2022-01-23
    • 2014-11-17
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多