BPL*_*BPL 24 c++ indentation auto-indent clang-format
我在项目的根目录中获得了下一个.clang格式的文件:
---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...
Run Code Online (Sandbox Code Playgroud)
当我在我的c ++标题上运行clang-format时出现问题,类会自动缩进,如下所示:
如您所见,标签public和private仅缩进2个空格.但我想要实现的是下面的输出(缩进是手动调整):
这样,代码崩溃变得非常愉快.
我怎么能调整我的.clang格式才能达到这个效果?如果不可能,你将如何修补clang格式的源代码来实现这种期望的行为?
编辑:
我尝试过使用AccessModifierOffset失败,我使用了以下值{-2,0,2,4}:
如您所见,公共块内的语句将不会正确缩进.
EDIT2:
我已经尝试了@Henrique Jung解决方案,这绝对不是我要求的,如果使用这种组合,结果将是这样的:
正如您所看到的,函数内部缩进了8个空格而不是4个,这并不好.
EDIT3:
几个月前我给了赏金,所以我要再试一次,因为这个肯定很有趣.如果我对俚语格式的源代码有足够的了解,我会试一试,不幸的是我没有.
小智 7
据我所知,clang-format 没有提供与非访问修饰符类内容不同的缩进功能内容的选项。也就是说,请考虑以下代码:
class A {
public:
void foo() {}
}
void bar() {
int a;
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,“void foo() {}”行将始终缩进与“int a;”相同的数量。通过 clang 格式。
与您似乎想要的样式最接近的是不缩进访问修饰符,例如:
class A {
public:
void foo() {}
}
void bar() {
int a;
}
Run Code Online (Sandbox Code Playgroud)
例如,这是通过 WebKit、Mozilla 和 LLVM 样式完成的。它是通过设置实现的:
IndentWidth: 4
AccessModifierOffset: -4
Run Code Online (Sandbox Code Playgroud)
由于您已经设置IndentWidth: 4并基于手动调整缩进的图像,因此您需要将这些添加到 .clang-format 中:
AccessModifierOffset: 0
IndentAccessModifiers: true
Run Code Online (Sandbox Code Playgroud)
请记住,clang-format-13使用选项时不需要或不需要IndentAccessModifiers。
由于没有锚点,我无法直接链接它,但您应该IndentAccessModifiers在https://clang.llvm.org/docs/ClangFormatStyleOptions.html阅读更多信息
我通过更改AccessModifierOffset和IndentWidth设法实现了您想要的效果。基本上,第一个用作第二个的偏移量,所以如果您像这样创建.clang-format,您会得到您想要的:
AccessModifierOffset: -4
IndentWidth: 8
Run Code Online (Sandbox Code Playgroud)
如果AccessModifierOffset为 0,则public关键字将与成员处于相同的缩进级别。然而,更改IndentWidth将使所有代码缩进 8 个空格,甚至是类声明之外的代码。这是示例代码:
class Foo {
public:
Foo();
virtual ~Foo(); };
int main(int argc, char *argv[]) {
std::cout << "Hello world" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5633 次 |
| 最近记录: |