I got the next .clang-format file in my project's root directory:
---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...
Problem comes when I run clang-format on my c++ headers, the classes become autoindented like this:
As you can see, labels public & private are indented only with 2 spaces. But what I'm trying to achieve is the below output (indentation was manually tweaked):
That way code-collapsing becomes something really pleasant to do.
How could I tweak my .clang-format to achieve this effect? If not possible, how would you patch clang-format source code to achieve this desired behaviour?
EDIT:
I've tried using unsuccessfully AccessModifierOffset, I've used values {-2,0,2,4} example below:
As you can see the statement inside the public block won't be indented properly.
EDIT2:
I've tried the @Henrique Jung solution and that's definitely not what I'm asking for, if using that combination the result would be something like this one:
And as you can see, the content inside the functions are indented 8 spaces instead 4, which is not good.
EDIT3:
I gave a bounty few months ago so I'm going to try again as this one is definitely interesting. If I got enough knowledge about clang-format source code I'd give it a shot, unfortunately I don't.
As near as I can tell, clang-format offers no option for indenting function contents differently from non-access-modifier class contents. That is, consider the following code:
class A {
public:
void foo() {}
}
void bar() {
int a;
}
In this code, the line "void foo() {}" will always be indented the same amount as "int a;" by clang-format.
The closest thing to the style you seem to want that is available would come from not indenting the access modifiers, e.g.:
class A {
public:
void foo() {}
}
void bar() {
int a;
}
This is done, for example, by the WebKit, Mozilla, and LLVM styles. It's achieved by setting:
IndentWidth: 4
AccessModifierOffset: -4