clang-format 3.8 在评论块前后中断

clang-format 3.8 breaks before and after comment blocks

有没有办法控制评论块前后的中断?

我想让我的评论块与以下功能相关联。我也想在评论块之前有一个换行符。

例如这段代码:

/**
 * \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()
{
}

};

格式如下:

/**
 * \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() {}
};

但我得到的是:

/**
 * \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() {}
};

这是我的 .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
...

我发现这个问题可以通过设置来解决:

KeepEmptyLinesAtTheStartOfBlocks: true