diff options
author | Daniel Jasper <djasper@google.com> | 2014-02-11 10:08:11 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2014-02-11 10:08:11 +0000 |
commit | a0407740c39dd139fed453439a3c570180aae9e7 (patch) | |
tree | a080a36d1d45f9b8c9c2a644fbf14c188f7c6664 /clang/lib/Format/ContinuationIndenter.cpp | |
parent | 405bdeddd18318d3b10edd474f6f08caa5e3a1d4 (diff) | |
download | bcm5719-llvm-a0407740c39dd139fed453439a3c570180aae9e7.tar.gz bcm5719-llvm-a0407740c39dd139fed453439a3c570180aae9e7.zip |
clang-format: Fix alignment of comments inside statements.
Before:
auto result = SomeObject
// Calling someFunction on SomeObject
.someFunction();
After:
auto result = SomeObject
// Calling someFunction on SomeObject
.someFunction();
llvm-svn: 201138
Diffstat (limited to 'clang/lib/Format/ContinuationIndenter.cpp')
-rw-r--r-- | clang/lib/Format/ContinuationIndenter.cpp | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 95cb54df9a6..5ea2488395d 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -335,8 +335,10 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, // breaks are chosen. unsigned Penalty = 0; - const FormatToken *PreviousNonComment = - State.NextToken->getPreviousNonComment(); + const FormatToken *PreviousNonComment = Current.getPreviousNonComment(); + const FormatToken *NextNonComment = Previous.getNextNonComment(); + if (!NextNonComment) + NextNonComment = &Current; // The first line break on any ParenLevel causes an extra penalty in order // prefer similar line breaks. if (!State.Stack.back().ContainsLineBreak) @@ -345,15 +347,18 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, Penalty += State.NextToken->SplitPenalty; + // Breaking before the first "<<" is generally not desirable if the LHS is // short. Also always add the penalty if the LHS is split over mutliple lines // to avoid unncessary line breaks that just work around this penalty. - if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0 && + if (NextNonComment->is(tok::lessless) && + State.Stack.back().FirstLessLess == 0 && (State.Column <= Style.ColumnLimit / 3 || State.Stack.back().BreakBeforeParameter)) Penalty += Style.PenaltyBreakFirstLessLess; - if (Current.is(tok::l_brace) && Current.BlockKind == BK_Block) { + if (NextNonComment->is(tok::l_brace) && + NextNonComment->BlockKind == BK_Block) { State.Column = State.ParenLevel == 0 ? State.FirstIndent : State.Stack.back().Indent; } else if (Current.isOneOf(tok::r_brace, tok::r_square)) { @@ -363,13 +368,14 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, State.Column = State.Stack[State.Stack.size() - 2].LastSpace; else State.Column = State.FirstIndent; - } else if (Current.isStringLiteral() && State.StartOfStringLiteral != 0) { + } else if (NextNonComment->isStringLiteral() && + State.StartOfStringLiteral != 0) { State.Column = State.StartOfStringLiteral; State.Stack.back().BreakBeforeParameter = true; - } else if (Current.is(tok::lessless) && + } else if (NextNonComment->is(tok::lessless) && State.Stack.back().FirstLessLess != 0) { State.Column = State.Stack.back().FirstLessLess; - } else if (Current.isMemberAccess()) { + } else if (NextNonComment->isMemberAccess()) { if (State.Stack.back().CallContinuation == 0) { State.Column = ContinuationIndent; State.Stack.back().CallContinuation = State.Column; @@ -377,7 +383,7 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, State.Column = State.Stack.back().CallContinuation; } } else if (State.Stack.back().QuestionColumn != 0 && - (Current.Type == TT_ConditionalExpr || + (NextNonComment->Type == TT_ConditionalExpr || Previous.Type == TT_ConditionalExpr)) { State.Column = State.Stack.back().QuestionColumn; } else if (Previous.is(tok::comma) && State.Stack.back().VariablePos != 0) { @@ -385,37 +391,38 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, } else if ((PreviousNonComment && (PreviousNonComment->ClosesTemplateDeclaration || PreviousNonComment->Type == TT_AttributeParen)) || - ((Current.Type == TT_StartOfName || - Current.is(tok::kw_operator)) && + ((NextNonComment->Type == TT_StartOfName || + NextNonComment->is(tok::kw_operator)) && State.ParenLevel == 0 && (!Style.IndentFunctionDeclarationAfterType || State.Line->StartsDefinition))) { State.Column = std::max(State.Stack.back().LastSpace, State.Stack.back().Indent); - } else if (Current.Type == TT_ObjCSelectorName) { + } else if (NextNonComment->Type == TT_ObjCSelectorName) { if (!State.Stack.back().ObjCSelectorNameFound) { - if (Current.LongestObjCSelectorName == 0) { + if (NextNonComment->LongestObjCSelectorName == 0) { State.Column = State.Stack.back().Indent; State.Stack.back().AlignColons = false; } else { State.Stack.back().ColonPos = - State.Stack.back().Indent + Current.LongestObjCSelectorName; - State.Column = State.Stack.back().ColonPos - Current.ColumnWidth; + State.Stack.back().Indent + NextNonComment->LongestObjCSelectorName; + State.Column = + State.Stack.back().ColonPos - NextNonComment->ColumnWidth; } } else if (!State.Stack.back().AlignColons) { State.Column = State.Stack.back().Indent; - } else if (State.Stack.back().ColonPos > Current.ColumnWidth) { - State.Column = State.Stack.back().ColonPos - Current.ColumnWidth; + } else if (State.Stack.back().ColonPos > NextNonComment->ColumnWidth) { + State.Column = State.Stack.back().ColonPos - NextNonComment->ColumnWidth; } else { State.Column = State.Stack.back().Indent; - State.Stack.back().ColonPos = State.Column + Current.ColumnWidth; + State.Stack.back().ColonPos = State.Column + NextNonComment->ColumnWidth; } - } else if (Current.Type == TT_ArraySubscriptLSquare) { + } else if (NextNonComment->Type == TT_ArraySubscriptLSquare) { if (State.Stack.back().StartOfArraySubscripts != 0) State.Column = State.Stack.back().StartOfArraySubscripts; else State.Column = ContinuationIndent; - } else if (Current.Type == TT_StartOfName || + } else if (NextNonComment->Type == TT_StartOfName || Previous.isOneOf(tok::coloncolon, tok::equal)) { State.Column = ContinuationIndent; } else if (PreviousNonComment && @@ -432,9 +439,9 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, // when we consume all of the "}"'s FakeRParens at the "{". if (State.Stack.size() > 1) State.Stack[State.Stack.size() - 2].LastSpace = ContinuationIndent; - } else if (Current.Type == TT_CtorInitializerColon) { + } else if (NextNonComment->Type == TT_CtorInitializerColon) { State.Column = State.FirstIndent + Style.ConstructorInitializerIndentWidth; - } else if (Current.Type == TT_CtorInitializerComma) { + } else if (NextNonComment->Type == TT_CtorInitializerComma) { State.Column = State.Stack.back().Indent; } else { State.Column = State.Stack.back().Indent; @@ -451,7 +458,7 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, State.Stack.back().BreakBeforeParameter = false; if (Previous.Type == TT_TemplateCloser && State.ParenLevel == 0) State.Stack.back().BreakBeforeParameter = false; - if (Current.is(tok::question) || + if (NextNonComment->is(tok::question) || (PreviousNonComment && PreviousNonComment->is(tok::question))) State.Stack.back().BreakBeforeParameter = true; |