зеркало из https://github.com/microsoft/clang-1.git
Add option to allow putting all parameters onto the next line.
This only affects styles where BinPackParameters is false. With AllowAllParametersOnNextLine: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaaa, aaaaaaaaaaa); Without it: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaaa, aaaaaaaaaaa); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
70b03f4eda
Коммит
8f4bd7a20f
|
@ -61,6 +61,10 @@ struct FormatStyle {
|
|||
/// will either all be on the same line or will have one line each.
|
||||
bool BinPackParameters;
|
||||
|
||||
/// \brief Allow putting all parameters of a function declaration/call onto
|
||||
/// the next line without calling this bin-packing.
|
||||
bool AllowAllParametersOnNextLine;
|
||||
|
||||
/// \brief If the constructor initializers don't fit on a line, put each
|
||||
/// initializer on its own line.
|
||||
bool ConstructorInitializerAllOnOneLineOrOnePerLine;
|
||||
|
|
|
@ -159,6 +159,7 @@ FormatStyle getLLVMStyle() {
|
|||
LLVMStyle.IndentCaseLabels = false;
|
||||
LLVMStyle.SpacesBeforeTrailingComments = 1;
|
||||
LLVMStyle.BinPackParameters = true;
|
||||
LLVMStyle.AllowAllParametersOnNextLine = true;
|
||||
LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false;
|
||||
LLVMStyle.AllowShortIfStatementsOnASingleLine = false;
|
||||
LLVMStyle.ObjCSpaceBeforeProtocolList = true;
|
||||
|
@ -175,6 +176,7 @@ FormatStyle getGoogleStyle() {
|
|||
GoogleStyle.IndentCaseLabels = true;
|
||||
GoogleStyle.SpacesBeforeTrailingComments = 2;
|
||||
GoogleStyle.BinPackParameters = false;
|
||||
GoogleStyle.AllowAllParametersOnNextLine = true;
|
||||
GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
|
||||
GoogleStyle.AllowShortIfStatementsOnASingleLine = false;
|
||||
GoogleStyle.ObjCSpaceBeforeProtocolList = false;
|
||||
|
@ -183,7 +185,7 @@ FormatStyle getGoogleStyle() {
|
|||
|
||||
FormatStyle getChromiumStyle() {
|
||||
FormatStyle ChromiumStyle = getGoogleStyle();
|
||||
ChromiumStyle.AllowShortIfStatementsOnASingleLine = false;
|
||||
ChromiumStyle.AllowAllParametersOnNextLine = false;
|
||||
return ChromiumStyle;
|
||||
}
|
||||
|
||||
|
@ -607,12 +609,20 @@ private:
|
|||
if (Newline && Previous.is(tok::l_brace))
|
||||
State.Stack.back().BreakBeforeClosingBrace = true;
|
||||
|
||||
// If we are breaking after '(', '{', '<' or ',', we need to break after
|
||||
// future commas as well to avoid bin packing.
|
||||
if (!Style.BinPackParameters && Newline &&
|
||||
(Previous.is(tok::comma) || Previous.is(tok::l_paren) ||
|
||||
Previous.is(tok::l_brace) || Previous.Type == TT_TemplateOpener))
|
||||
State.Stack.back().BreakAfterComma = true;
|
||||
if (!Style.BinPackParameters && Newline) {
|
||||
// If we are breaking after '(', '{', '<', this is not bin packing unless
|
||||
// AllowAllParametersOnNextLine is false.
|
||||
if ((Previous.isNot(tok::l_paren) && Previous.isNot(tok::l_brace) &&
|
||||
Previous.Type != TT_TemplateOpener) ||
|
||||
!Style.AllowAllParametersOnNextLine)
|
||||
State.Stack.back().BreakAfterComma = true;
|
||||
|
||||
// Any break on this level means that the parent level has been broken
|
||||
// and we need to avoid bin packing there.
|
||||
for (unsigned i = 0, e = State.Stack.size() - 1; i != e; ++i) {
|
||||
State.Stack[i].BreakAfterComma = true;
|
||||
}
|
||||
}
|
||||
|
||||
moveStateToNextToken(State);
|
||||
}
|
||||
|
@ -642,17 +652,6 @@ private:
|
|||
}
|
||||
State.Stack.push_back(
|
||||
ParenState(NewIndent, State.Stack.back().LastSpace));
|
||||
|
||||
// If the entire set of parameters will not fit on the current line, we
|
||||
// will need to break after commas on this level to avoid bin-packing.
|
||||
if (!Style.BinPackParameters && Current.MatchingParen != NULL &&
|
||||
!Current.Children.empty()) {
|
||||
if (getColumnLimit() < State.Column + Current.FormatTok.TokenLength +
|
||||
Current.MatchingParen->TotalLength -
|
||||
Current.Children[0].TotalLength) {
|
||||
State.Stack.back().BreakAfterComma = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we encounter a closing ), ], } or >, we can remove a level from our
|
||||
|
|
|
@ -964,9 +964,15 @@ TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) {
|
|||
" aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)));");
|
||||
verifyGoogleFormat(
|
||||
"aaaaaaaaaaaaaaa(aaaaaaaaa,\n"
|
||||
" aaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaaaa).aaaaaaaaaaaaaaaaaa();");
|
||||
"aaaaaaaaaaaaaaa(\n"
|
||||
" aaaaaaaaa, aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaa).aaaaaaaaaaaaaaaaaa();");
|
||||
verifyGoogleFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
|
||||
" aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaaaa);");
|
||||
|
||||
verifyGoogleFormat(
|
||||
"aaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaa);");
|
||||
verifyGoogleFormat(
|
||||
"somefunction(someotherFunction(ddddddddddddddddddddddddddddddddddd,\n"
|
||||
" ddddddddddddddddddddddddddddd),\n"
|
||||
|
@ -979,6 +985,13 @@ TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) {
|
|||
verifyGoogleFormat("a(\"a\"\n"
|
||||
" \"a\",\n"
|
||||
" a);");
|
||||
|
||||
FormatStyle Style = getGoogleStyle();
|
||||
Style.AllowAllParametersOnNextLine = false;
|
||||
verifyFormat("aaaaaaaaaaaaaaa(aaaaaaaaa,\n"
|
||||
" aaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaa).aaaaaaaaaaaaaaaaaa();",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, FormatsBuilderPattern) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче