<div dir="ltr">s/laster/latest/</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Mar 1, 2013 at 5:48 PM, Daniel Jasper <span dir="ltr"><<a href="mailto:djasper@google.com" target="_blank">djasper@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djasper<br>
Date: Fri Mar 1 10:48:32 2013<br>
New Revision: 176352<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=176352&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=176352&view=rev</a><br>
Log:<br>
Normal indent for last element of builder-type call.<br>
<br>
In builder type call, we indent to the laster function calls.<br>
However, for the last element of such a call, we don't need to do<br>
so, as that normally just wastes space and does not increase<br>
readability.<br>
<br>
Before:<br>
aaaaaa->aaaaaa->aaaaaa( // break<br>
aaaaaa);<br>
aaaaaaaaaaaaaaaaaaaaa->aaaaaaaaaaaaaaaaaaaaaa<br>
->aaaaaaaaaaaaaaaaaaaaaaaaaa(<br>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);<br>
<br>
After:<br>
aaaaaa->aaaaaa->aaaaaa( // break<br>
aaaaaa);<br>
aaaaaaaaaaaaaaaaaaaaa->aaaaaaaaaaaaaaaaaaaaaa->aaaaaaaaaaaaaaaaaaaaaaaaaa(<br>
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);<br>
<br>
Modified:<br>
cfe/trunk/lib/Format/Format.cpp<br>
cfe/trunk/lib/Format/TokenAnnotator.cpp<br>
cfe/trunk/lib/Format/TokenAnnotator.h<br>
cfe/trunk/unittests/Format/FormatTest.cpp<br>
<br>
Modified: cfe/trunk/lib/Format/Format.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=176352&r1=176351&r2=176352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=176352&r1=176351&r2=176352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Format/Format.cpp (original)<br>
+++ cfe/trunk/lib/Format/Format.cpp Fri Mar 1 10:48:32 2013<br>
@@ -339,7 +339,8 @@ private:<br>
: Indent(Indent), LastSpace(LastSpace), FirstLessLess(0),<br>
BreakBeforeClosingBrace(false), QuestionColumn(0),<br>
AvoidBinPacking(AvoidBinPacking), BreakBeforeParameter(false),<br>
- HasMultiParameterLine(HasMultiParameterLine), ColonPos(0) {}<br>
+ HasMultiParameterLine(HasMultiParameterLine), ColonPos(0),<br>
+ StartOfFunctionCall(0) {}<br>
<br>
/// \brief The position to which a specific parenthesis level needs to be<br>
/// indented.<br>
@@ -382,6 +383,9 @@ private:<br>
/// \brief The position of the colon in an ObjC method declaration/call.<br>
unsigned ColonPos;<br>
<br>
+ /// \brief The start of the most recent function in a builder-type call.<br>
+ unsigned StartOfFunctionCall;<br>
+<br>
bool operator<(const ParenState &Other) const {<br>
if (Indent != Other.Indent)<br>
return Indent < Other.Indent;<br>
@@ -401,6 +405,8 @@ private:<br>
return HasMultiParameterLine;<br>
if (ColonPos != Other.ColonPos)<br>
return ColonPos < Other.ColonPos;<br>
+ if (StartOfFunctionCall != Other.StartOfFunctionCall)<br>
+ return StartOfFunctionCall < Other.StartOfFunctionCall;<br>
return false;<br>
}<br>
};<br>
@@ -622,9 +628,6 @@ private:<br>
// If this function has multiple parameters, indent nested calls from<br>
// the start of the first parameter.<br>
State.Stack.back().LastSpace = State.Column;<br>
- else if ((Current.is(tok::period) || Current.is(tok::arrow)) &&<br>
- Line.Type == LT_BuilderTypeCall && State.ParenLevel == 0)<br>
- State.Stack.back().LastSpace = State.Column;<br>
}<br>
<br>
return moveStateToNextToken(State, DryRun);<br>
@@ -642,6 +645,10 @@ private:<br>
State.Stack.back().FirstLessLess = State.Column;<br>
if (Current.is(tok::question))<br>
State.Stack.back().QuestionColumn = State.Column;<br>
+ if ((Current.is(tok::period) || Current.is(tok::arrow)) &&<br>
+ Line.Type == LT_BuilderTypeCall && State.ParenLevel == 0)<br>
+ State.Stack.back().StartOfFunctionCall =<br>
+ Current.LastInChainOfCalls ? 0 : State.Column;<br>
if (Current.Type == TT_CtorInitializerColon) {<br>
if (Style.ConstructorInitializerAllOnOneLineOrOnePerLine)<br>
State.Stack.back().AvoidBinPacking = true;<br>
@@ -667,7 +674,8 @@ private:<br>
NewIndent = 2 + State.Stack.back().LastSpace;<br>
AvoidBinPacking = false;<br>
} else {<br>
- NewIndent = 4 + State.Stack.back().LastSpace;<br>
+ NewIndent = 4 + std::max(State.Stack.back().LastSpace,<br>
+ State.Stack.back().StartOfFunctionCall);<br>
AvoidBinPacking =<br>
!Style.BinPackParameters || State.Stack.back().AvoidBinPacking;<br>
}<br>
<br>
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=176352&r1=176351&r2=176352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=176352&r1=176351&r2=176352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)<br>
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Fri Mar 1 10:48:32 2013<br>
@@ -464,6 +464,7 @@ private:<br>
public:<br>
LineType parseLine() {<br>
int PeriodsAndArrows = 0;<br>
+ AnnotatedToken *LastPeriodOrArrow = NULL;<br>
bool CanBeBuilderTypeStmt = true;<br>
if (CurrentToken->is(tok::hash)) {<br>
parsePreprocessorDirective();<br>
@@ -472,8 +473,10 @@ public:<br>
while (CurrentToken != NULL) {<br>
if (CurrentToken->is(tok::kw_virtual))<br>
KeywordVirtualFound = true;<br>
- if (CurrentToken->is(tok::period) || CurrentToken->is(tok::arrow))<br>
+ if (CurrentToken->is(tok::period) || CurrentToken->is(tok::arrow)) {<br>
++PeriodsAndArrows;<br>
+ LastPeriodOrArrow = CurrentToken;<br>
+ }<br>
AnnotatedToken *TheToken = CurrentToken;<br>
if (!consumeToken())<br>
return LT_Invalid;<br>
@@ -485,8 +488,10 @@ public:<br>
return LT_VirtualFunctionDecl;<br>
<br>
// Assume a builder-type call if there are 2 or more "." and "->".<br>
- if (PeriodsAndArrows >= 2 && CanBeBuilderTypeStmt)<br>
+ if (PeriodsAndArrows >= 2 && CanBeBuilderTypeStmt) {<br>
+ LastPeriodOrArrow->LastInChainOfCalls = true;<br>
return LT_BuilderTypeCall;<br>
+ }<br>
<br>
if (Line.First.Type == TT_ObjCMethodSpecifier) {<br>
if (Contexts.back().FirstObjCSelectorName != NULL)<br>
@@ -934,7 +939,7 @@ unsigned TokenAnnotator::splitPenalty(co<br>
<br>
if (Level != prec::Unknown)<br>
return Level;<br>
-<br>
+<br>
return 3;<br>
}<br>
<br>
<br>
Modified: cfe/trunk/lib/Format/TokenAnnotator.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=176352&r1=176351&r2=176352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=176352&r1=176351&r2=176352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Format/TokenAnnotator.h (original)<br>
+++ cfe/trunk/lib/Format/TokenAnnotator.h Fri Mar 1 10:48:32 2013<br>
@@ -75,7 +75,7 @@ public:<br>
ClosesTemplateDeclaration(false), MatchingParen(NULL),<br>
ParameterCount(0), BindingStrength(0), SplitPenalty(0),<br>
LongestObjCSelectorName(0), Parent(NULL), FakeLParens(0),<br>
- FakeRParens(0) {<br>
+ FakeRParens(0), LastInChainOfCalls(false) {<br>
}<br>
<br>
bool is(tok::TokenKind Kind) const { return <a href="http://FormatTok.Tok.is" target="_blank">FormatTok.Tok.is</a>(Kind); }<br>
@@ -127,6 +127,9 @@ public:<br>
/// \brief Insert this many fake ) after this token for correct indentation.<br>
unsigned FakeRParens;<br>
<br>
+ /// \brief Is this the last "." or "->" in a builder-type call?<br>
+ bool LastInChainOfCalls;<br>
+<br>
const AnnotatedToken *getPreviousNoneComment() const {<br>
AnnotatedToken *Tok = Parent;<br>
while (Tok != NULL && Tok->is(tok::comment))<br>
<br>
Modified: cfe/trunk/unittests/Format/FormatTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=176352&r1=176351&r2=176352&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=176352&r1=176351&r2=176352&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)<br>
+++ cfe/trunk/unittests/Format/FormatTest.cpp Fri Mar 1 10:48:32 2013<br>
@@ -1331,7 +1331,7 @@ TEST_F(FormatTest, FormatsBuilderPattern<br>
" ->aaaaaaaa(aaaaaaaaaaaaaaa);");<br>
verifyFormat(<br>
"aaaaaaaaaaaaaaaaaaa()->aaaaaa(bbbbb)->aaaaaaaaaaaaaaaaaaa( // break\n"<br>
- " aaaaaaaaaaaaaa);");<br>
+ " aaaaaaaaaaaaaa);");<br>
verifyFormat(<br>
"aaaaaaaaaaaaaaaaaaaaaaa *aaaaaaaaa = aaaaaa->aaaaaaaaaaaa()\n"<br>
" ->aaaaaaaaaaaaaaaa(\n"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>