зеркало из https://github.com/microsoft/clang-1.git
Improve formatting of chained calls.
clang-format already prevented sequences like: ... SomeParameter).someFunction( ... as those are quite confusing. This failed on: ... SomeParameter).someFunction(otherFunction( ... Fixed in this patch. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177157 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
1fdd8b351e
Коммит
3af59ce065
|
@ -985,14 +985,6 @@ private:
|
|||
!(State.NextToken->is(tok::r_brace) &&
|
||||
State.Stack.back().BreakBeforeClosingBrace))
|
||||
return false;
|
||||
// This prevents breaks like:
|
||||
// ...
|
||||
// SomeParameter, OtherParameter).DoSomething(
|
||||
// ...
|
||||
// As they hide "DoSomething" and generally bad for readability.
|
||||
if (State.NextToken->Parent->is(tok::l_paren) &&
|
||||
State.ParenLevel <= State.StartOfLineLevel)
|
||||
return false;
|
||||
// Trying to insert a parameter on a new line if there are already more than
|
||||
// one parameter on the current line is bin packing.
|
||||
if (State.Stack.back().HasMultiParameterLine &&
|
||||
|
@ -1031,9 +1023,25 @@ private:
|
|||
return true;
|
||||
if (State.NextToken->Type == TT_InlineASMColon)
|
||||
return true;
|
||||
// This prevents breaks like:
|
||||
// ...
|
||||
// SomeParameter, OtherParameter).DoSomething(
|
||||
// ...
|
||||
// As they hide "DoSomething" and generally bad for readability.
|
||||
if (State.NextToken->isOneOf(tok::period, tok::arrow) &&
|
||||
getRemainingLength(State) + State.Column > getColumnLimit() &&
|
||||
State.ParenLevel < State.StartOfLineLevel)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Returns the total number of columns required for the remaining tokens.
|
||||
unsigned getRemainingLength(const LineState &State) {
|
||||
if (State.NextToken && State.NextToken->Parent)
|
||||
return Line.Last->TotalLength - State.NextToken->Parent->TotalLength;
|
||||
return 0;
|
||||
}
|
||||
|
||||
FormatStyle Style;
|
||||
SourceManager &SourceMgr;
|
||||
const AnnotatedLine &Line;
|
||||
|
|
|
@ -1720,6 +1720,12 @@ TEST_F(FormatTest, WrapsAtFunctionCallsIfNecessary) {
|
|||
" .WillRepeatedly(Return(SomeValue));");
|
||||
verifyFormat("SomeMap[std::pair(aaaaaaaaaaaa, bbbbbbbbbbbbbbb)]\n"
|
||||
" .insert(ccccccccccccccccccccccc);");
|
||||
verifyFormat(
|
||||
"aaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n"
|
||||
" .aaaaaaaaaaaaaaa(\n"
|
||||
" aa(aaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaaaaaaaa));");
|
||||
|
||||
// Here, it is not necessary to wrap at "." or "->".
|
||||
verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaa) ||\n"
|
||||
|
@ -1737,6 +1743,10 @@ TEST_F(FormatTest, WrapsAtFunctionCallsIfNecessary) {
|
|||
verifyFormat("a->aaaaaa()->aaaaaaaaaaa(aaaaaaaa()->aaaaaa()->aaaaa() ||\n"
|
||||
" aaaaaaaaa()->aaaaaa()->aaaaa());");
|
||||
|
||||
// FIXME: Should we break before .a()?
|
||||
verifyFormat("aaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
|
||||
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa).a();");
|
||||
|
||||
FormatStyle NoBinPacking = getLLVMStyle();
|
||||
NoBinPacking.BinPackParameters = false;
|
||||
verifyFormat("aaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa)\n"
|
||||
|
|
Загрузка…
Ссылка в новой задаче