forked from OSchip/llvm-project
clang-format: Add option to always break after a function's return type.
This is required for GNU coding style, among others. Also update the configuration documentation. Modified from an original patch by Jarkko Hietaniemi, thank you! llvm-svn: 214858
This commit is contained in:
parent
d9670878d4
commit
ca4ea1ce59
|
@ -133,6 +133,13 @@ the configuration (without a prefix: ``Auto``).
|
|||
If ``true``, ``while (true) continue;`` can be put on a
|
||||
single line.
|
||||
|
||||
**AlwaysBreakAfterDefinitionReturnType** (``bool``)
|
||||
If ``true``, always break after function definition return types.
|
||||
|
||||
More truthfully called 'break before the identifier following the type
|
||||
in a function definition'. PenaltyReturnTypeOnItsOwnLine becomes
|
||||
irrelevant.
|
||||
|
||||
**AlwaysBreakBeforeMultilineStrings** (``bool``)
|
||||
If ``true``, always break before multiline string literals.
|
||||
|
||||
|
@ -158,7 +165,7 @@ the configuration (without a prefix: ``Auto``).
|
|||
Like ``Attach``, but break before braces on function, namespace and
|
||||
class definitions.
|
||||
* ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
|
||||
Like ``Attach``, but break before function definitions.
|
||||
Like ``Attach``, but break before function definitions, and 'else'.
|
||||
* ``BS_Allman`` (in configuration: ``Allman``)
|
||||
Always break before braces.
|
||||
* ``BS_GNU`` (in configuration: ``GNU``)
|
||||
|
@ -213,7 +220,7 @@ the configuration (without a prefix: ``Auto``).
|
|||
|
||||
**DerivePointerAlignment** (``bool``)
|
||||
If ``true``, analyze the formatted file for the most common
|
||||
alignment of & and \*. ``PointerAlignment`` is then used only as fallback.
|
||||
alignment of & and *. ``PointerAlignment`` is then used only as fallback.
|
||||
|
||||
**DisableFormat** (``bool``)
|
||||
Disables formatting at all.
|
||||
|
|
|
@ -235,6 +235,13 @@ struct FormatStyle {
|
|||
/// initializer lists.
|
||||
unsigned ConstructorInitializerIndentWidth;
|
||||
|
||||
/// \brief If \c true, always break after function definition return types.
|
||||
///
|
||||
/// More truthfully called 'break before the identifier following the type
|
||||
/// in a function definition'. PenaltyReturnTypeOnItsOwnLine becomes
|
||||
/// irrelevant.
|
||||
bool AlwaysBreakAfterDefinitionReturnType;
|
||||
|
||||
/// \brief If \c true, always break after the <tt>template<...></tt> of a
|
||||
/// template declaration.
|
||||
bool AlwaysBreakTemplateDeclarations;
|
||||
|
@ -370,6 +377,8 @@ struct FormatStyle {
|
|||
AllowShortIfStatementsOnASingleLine ==
|
||||
R.AllowShortIfStatementsOnASingleLine &&
|
||||
AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
|
||||
AlwaysBreakAfterDefinitionReturnType ==
|
||||
R.AlwaysBreakAfterDefinitionReturnType &&
|
||||
AlwaysBreakTemplateDeclarations ==
|
||||
R.AlwaysBreakTemplateDeclarations &&
|
||||
AlwaysBreakBeforeMultilineStrings ==
|
||||
|
|
|
@ -173,6 +173,8 @@ template <> struct MappingTraits<FormatStyle> {
|
|||
Style.AllowShortLoopsOnASingleLine);
|
||||
IO.mapOptional("AllowShortFunctionsOnASingleLine",
|
||||
Style.AllowShortFunctionsOnASingleLine);
|
||||
IO.mapOptional("AlwaysBreakAfterDefinitionReturnType",
|
||||
Style.AlwaysBreakAfterDefinitionReturnType);
|
||||
IO.mapOptional("AlwaysBreakTemplateDeclarations",
|
||||
Style.AlwaysBreakTemplateDeclarations);
|
||||
IO.mapOptional("AlwaysBreakBeforeMultilineStrings",
|
||||
|
@ -311,6 +313,7 @@ FormatStyle getLLVMStyle() {
|
|||
LLVMStyle.AllowShortBlocksOnASingleLine = false;
|
||||
LLVMStyle.AllowShortIfStatementsOnASingleLine = false;
|
||||
LLVMStyle.AllowShortLoopsOnASingleLine = false;
|
||||
LLVMStyle.AlwaysBreakAfterDefinitionReturnType = false;
|
||||
LLVMStyle.AlwaysBreakBeforeMultilineStrings = false;
|
||||
LLVMStyle.AlwaysBreakTemplateDeclarations = false;
|
||||
LLVMStyle.BinPackParameters = true;
|
||||
|
@ -443,6 +446,7 @@ FormatStyle getWebKitStyle() {
|
|||
|
||||
FormatStyle getGNUStyle() {
|
||||
FormatStyle Style = getLLVMStyle();
|
||||
Style.AlwaysBreakAfterDefinitionReturnType = true;
|
||||
Style.BreakBeforeBinaryOperators = true;
|
||||
Style.BreakBeforeBraces = FormatStyle::BS_GNU;
|
||||
Style.BreakBeforeTernaryOperators = true;
|
||||
|
|
|
@ -1288,6 +1288,11 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) {
|
|||
Current->MustBreakBefore =
|
||||
Current->MustBreakBefore || mustBreakBefore(Line, *Current);
|
||||
|
||||
if (Style.AlwaysBreakAfterDefinitionReturnType &&
|
||||
InFunctionDecl && Current->Type == TT_FunctionDeclarationName &&
|
||||
Line.Last->is(tok::l_brace)) // Only for definitions.
|
||||
Current->MustBreakBefore = true;
|
||||
|
||||
Current->CanBreakBefore =
|
||||
Current->MustBreakBefore || canBreakBefore(Line, *Current);
|
||||
unsigned ChildSize = 0;
|
||||
|
|
|
@ -4147,6 +4147,17 @@ TEST_F(FormatTest, AlignsStringLiterals) {
|
|||
getLLVMStyleWithColumns(25));
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, AlwaysBreakAfterDefinitionReturnType) {
|
||||
FormatStyle AfterType = getLLVMStyle();
|
||||
AfterType.AlwaysBreakAfterDefinitionReturnType = true;
|
||||
verifyFormat("const char *\n"
|
||||
"f(void) {\n" // Break here.
|
||||
" return \"\";\n"
|
||||
"}\n"
|
||||
"const char *bar(void);\n", // No break here.
|
||||
AfterType);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, AlwaysBreakBeforeMultilineStrings) {
|
||||
FormatStyle NoBreak = getLLVMStyle();
|
||||
NoBreak.AlwaysBreakBeforeMultilineStrings = false;
|
||||
|
@ -8148,6 +8159,7 @@ TEST_F(FormatTest, ParsesConfiguration) {
|
|||
CHECK_PARSE_BOOL(AllowShortBlocksOnASingleLine);
|
||||
CHECK_PARSE_BOOL(AllowShortIfStatementsOnASingleLine);
|
||||
CHECK_PARSE_BOOL(AllowShortLoopsOnASingleLine);
|
||||
CHECK_PARSE_BOOL(AlwaysBreakAfterDefinitionReturnType);
|
||||
CHECK_PARSE_BOOL(AlwaysBreakTemplateDeclarations);
|
||||
CHECK_PARSE_BOOL(BinPackParameters);
|
||||
CHECK_PARSE_BOOL(BreakBeforeBinaryOperators);
|
||||
|
|
Loading…
Reference in New Issue