如何使用 clang 格式自动缩进具有 4 个空格的 C 类?

新手上路,请多包涵

我在项目的根目录中获得了下一个 .clang-format 文件:

 ---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...

当我在我的 c++ 头文件上运行 clang-format 时出现问题,这些类会像这样自动缩进:

在此处输入图像描述

如您所见,标签 public 和 private 仅缩进 2 个空格。但我想要实现的是以下输出(缩进是手动调整的):

在此处输入图像描述

这样,代码折叠就变成了一件非常愉快的事情。

我怎样才能调整我的 .clang 格式来达到这个效果?如果不可能,您将如何修补 clang 格式的源代码以实现这种所需的行为?

编辑:

我尝试使用不成功的 AccessModifierOffset,我使用了值 {-2,0,2,4} 下面的示例:

在此处输入图像描述

如您所见,公共块内的语句不会正确缩进。

编辑2:

我已经尝试过@Henrique Jung 解决方案,这绝对不是我想要的,如果使用这种组合,结果会是这样的:

在此处输入图像描述

如您所见,函数内部的内容缩进了 8 个空格而不是 4 个空格,这不好。

编辑3:

几个月前我给了一个赏金,所以我要再试一次,因为这个肯定很有趣。如果我对 clang 格式的源代码有足够的了解,我会试一试,不幸的是我没有。

原文由 BPL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 923
1 个回答

据我所知,clang-format 没有提供与非访问修饰符类内容不同的缩进函数内容的选项。也就是说,考虑以下代码:

 class A {
  public:
    void foo() {}
}

void bar() {
    int a;
}

在这段代码中,“void foo() {}”行的缩进量总是与“int a;”相同。通过 clang 格式。

与您似乎想要的可用样式最接近的东西来自不缩进访问修饰符,例如:

 class A {
public:
    void foo() {}
}

void bar() {
    int a;
}

例如,这是由 WebKit、Mozilla 和 LLVM 样式完成的。它是通过设置来实现的:

 IndentWidth: 4
AccessModifierOffset: -4

原文由 Kimby 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题