XKpe XKpe - 3 months ago 35
C++ Question

clang-format 3.8 breaks before and after comment blocks

Is there a way to control the break before and after comment blocks?

I'd like to have my comment blocks to be connected with the following function. I'd also like to have one line break before a comment block.

For example this code:

/**
* \breif some comments
*/

void f1()
{
}


/**
* \breif some comments
*/


void f1()
{
}


class A {

/**
* \breif some comments
*/

void f1()
{
}

/**
* \breif some comments
*/
void f1()
{
}
};

template<typename T>
class A {


/**
* \breif some comments
*/

void f1()
{
}

/**
* \breif some comments
*/
void f1()
{
}

};


To be formatted like this:

/**
* \breif some comments
*/
void f1()
{
}

/**
* \breif some comments
*/
void f1()
{
}

class A
{
/**
* \breif some comments
*/
void f1() {}

/**
* \breif some comments
*/
void f1() {}
};

template < typename T >
class A
{
/**
* \breif some comments
*/
void f1() {}

/**
* \breif some comments
*/
void f1() {}
};


But what I'm getting is this:

/**
* \breif some comments
*/

void f1()
{
}

/**
* \breif some comments
*/

void f1()
{
}

class A
{
/**
* \breif some comments
*/

void f1() {}
/**
* \breif some comments
*/
void f1() {}
};

template < typename T >
class A
{
/**
* \breif some comments
*/

void f1() {}
/**
* \breif some comments
*/
void f1() {}
};


Here is my
.clang-format
:

---
Language: Cpp
BasedOnStyle: Google
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false

AlignEscapedNewlinesLeft: true
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true

AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true

BinPackArguments: true
BinPackParameters: true

BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false

BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 0
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IndentCaseLabels: false
IndentWidth: 2
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
ReflowComments: true
SortIncludes: true
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Never
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: true
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: true
SpacesInParentheses: true
SpacesInSquareBrackets: true
Standard: Auto
TabWidth: 2
UseTab: Never
...

Answer

I've found that this problem can be solved by setting:

KeepEmptyLinesAtTheStartOfBlocks: true