我在项目的根目录下得到了下一个. clang格式的文件:
---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...
当我在我的C++头文件上运行clang-format时,问题出现了,类变成了这样的自动缩进:
正如你所看到的,标签public & private只缩进了2个空格。但我尝试实现的是下面的输出(缩进是手动调整的):
这样,代码折叠就变成了一件非常愉快的事情。
我如何调整我的.clang-format来达到这个效果?如果不可能,你会如何修补clang-format源代码来达到这个期望的行为?
编辑:
我尝试使用AccessModifierOffset失败,我使用的值{-2,0,2,4}示例如下:
正如您所看到的,公共块中的语句将不会正确缩进。
编辑2:
我已经尝试了“亨里克·荣格”的解决方案,这绝对不是我想要的,如果使用这种组合,结果会是这样的:
正如你所看到的,函数中的内容缩进了8个空格,而不是4个,这是不好的。
编辑3:
几个月前我给了一个赏金,所以我打算再试一次,因为这个肯定很有趣。如果我有足够的关于clang格式源代码的知识,我会给予它一个机会,不幸的是我没有。
5条答案
按热度按时间rkue9o1l1#
就我所知,clang-format没有提供将函数内容与非访问修饰符类内容进行不同缩进的选项。
在这段代码中,“void foo(){}”行将始终缩进与“int a;“通过叮当声格式。
最接近您想要的可用样式的方式是不缩进访问修饰符,例如:
例如,通过WebKit、Mozilla和LLVM样式可以实现这一点。
oipij1gg2#
我通过更改AccessModifierOffset和IndentWidth来实现您想要的效果。基本上,第一个用作第二个的偏移量,因此如果您像这样创建 .clang-format,您将得到您想要的结果:
如果
AccessModifierOffset
为0,则public
保留字的缩排层级会与成员相同。但是,变更IndentWidth
会将所有程式码缩排8个空格,即使是类别宣告之外的程式码也一样。以下是范例程式码:8dtrkrch3#
我遇到了同样的问题,找到最快的解决办法就是复制一份clang默认设置(通过首选项-〉软件包设置-〉Clang格式-〉自定义样式-默认找到)添加到用户自定义设置中(首选项-〉包设置-〉Clang格式-〉自定义样式-用户),然后取消注解并将某些选项修改为您自己的首选项。例如:
aor9mmx14#
对于
clang-format 13
(https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.0),您可以用途:以实现期望的行为。
如果您使用默认Visual Studio,它附带
clang-format 12
不支持此功能要使用它,请下载并安装clang-format 13
,然后从Tools->Options->Text Editor->C/C++->Code Style->Formatting->General
选中Use custom clang-format.exe file
并选择clang format 13
可执行文件zpgglvta5#
由于您已经设置了
IndentWidth: 4
,并且基于手动调整缩进的图像,您需要将以下内容添加到您的. clang-format中:请记住,使用
IndentAccessModifiers
选项时需要使用clang-format-13
或never。由于没有锚,我不能直接链接它,但你应该在https://clang.llvm.org/docs/ClangFormatStyleOptions.html上阅读更多关于
IndentAccessModifiers
的内容