r206384 - clang-format: Add special case to reduce indentaiton in streams.
Manuel Klimek
klimek at google.com
Wed Apr 16 06:08:44 PDT 2014
On Wed, Apr 16, 2014 at 2:26 PM, Daniel Jasper <djasper at google.com> wrote:
> Author: djasper
> Date: Wed Apr 16 07:26:54 2014
> New Revision: 206384
>
> URL: http://llvm.org/viewvc/llvm-project?rev=206384&view=rev
> Log:
> clang-format: Add special case to reduce indentaiton in streams.
>
> This is similar to how we treat assignments and seems to be generally
> desirable.
>
> Before:
> llvm::errs() << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
> aaaaaaaaaaaaaaaaaaaaaaaaaaaa,
> aaaaaaaaaaaaaaaaaaaaaaaaaaaa);
>
> After:
> llvm::errs() << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
> aaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaa);
>
> Modified:
> cfe/trunk/lib/Format/ContinuationIndenter.cpp
> cfe/trunk/lib/Format/FormatToken.h
> cfe/trunk/lib/Format/TokenAnnotator.cpp
> cfe/trunk/unittests/Format/FormatTest.cpp
>
> Modified: cfe/trunk/lib/Format/ContinuationIndenter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=206384&r1=206383&r2=206384&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Format/ContinuationIndenter.cpp (original)
> +++ cfe/trunk/lib/Format/ContinuationIndenter.cpp Wed Apr 16 07:26:54 2014
> @@ -301,7 +301,9 @@ void ContinuationIndenter::addTokenOnCur
> else if ((Previous.Type == TT_BinaryOperator ||
> Previous.Type == TT_ConditionalExpr ||
> Previous.Type == TT_CtorInitializerColon) &&
> - (Previous.getPrecedence() != prec::Assignment ||
> + ((Previous.getPrecedence() != prec::Assignment &&
> + (Previous.isNot(tok::lessless) || Previous.OperatorIndex !=
> 0 ||
> + !Previous.LastOperator)) ||
>
(optional) I think this would be significantly easier to understand for me
if it was pulled out into a bool variable, something like:
bool PreviousIsSingleLessLess = Previous.is(tok::lessless) &&
Previuos.OperatorIndex == 0 && Previous.LastOperator;
> Current.StartsBinaryExpression))
> // Always indent relative to the RHS of the expression unless this is
> a
> // simple assignment without binary expression on the RHS. Also indent
> @@ -573,7 +575,7 @@ unsigned ContinuationIndenter::moveState
> std::min(State.LowestLevelOnLine, State.ParenLevel);
> if (Current.isMemberAccess())
> State.Stack.back().StartOfFunctionCall =
> - Current.LastInChainOfCalls ? 0 : State.Column +
> Current.ColumnWidth;
> + Current.LastOperator ? 0 : State.Column + Current.ColumnWidth;
> if (Current.Type == TT_ObjCSelectorName)
> State.Stack.back().ObjCSelectorNameFound = true;
> if (Current.Type == TT_LambdaLSquare)
>
> Modified: cfe/trunk/lib/Format/FormatToken.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/FormatToken.h?rev=206384&r1=206383&r2=206384&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Format/FormatToken.h (original)
> +++ cfe/trunk/lib/Format/FormatToken.h Wed Apr 16 07:26:54 2014
> @@ -106,8 +106,9 @@ struct FormatToken {
> UnbreakableTailLength(0), BindingStrength(0), NestingLevel(0),
> SplitPenalty(0), LongestObjCSelectorName(0), FakeRParens(0),
> StartsBinaryExpression(false), EndsBinaryExpression(false),
> - LastInChainOfCalls(false), PartOfMultiVariableDeclStmt(false),
> - IsForEachMacro(false), MatchingParen(NULL), Previous(NULL),
> Next(NULL),
> + OperatorIndex(0), LastOperator(false),
> + PartOfMultiVariableDeclStmt(false), IsForEachMacro(false),
> + MatchingParen(NULL), Previous(NULL), Next(NULL),
> Decision(FD_Unformatted), Finalized(false) {}
>
> /// \brief The \c Token.
> @@ -242,8 +243,13 @@ struct FormatToken {
> /// \brief \c true if this token ends a binary expression.
> bool EndsBinaryExpression;
>
> - /// \brief Is this the last "." or "->" in a builder-type call?
> - bool LastInChainOfCalls;
> + /// \brief Is this is an operator (or "."/"->") in a sequence of
> operators
> + /// with the same precedence, contains the 0-based operator index.
> + unsigned OperatorIndex;
> +
> + /// \brief Is this the last operator (or "."/"->") in a sequence of
> operators
> + /// with the same precedence?
> + bool LastOperator;
>
> /// \brief Is this token part of a \c DeclStmt defining multiple
> variables?
> ///
>
> Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=206384&r1=206383&r2=206384&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
> +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed Apr 16 07:26:54 2014
> @@ -978,6 +978,7 @@ public:
>
> FormatToken *Start = Current;
> FormatToken *LatestOperator = NULL;
> + unsigned OperatorIndex = 0;
>
> while (Current) {
> // Consume operators with higher precedence.
> @@ -997,8 +998,8 @@ public:
> if (Current == NULL || Current->closesScope() ||
> (CurrentPrecedence != -1 && CurrentPrecedence < Precedence)) {
> if (LatestOperator) {
> + LatestOperator->LastOperator = true;
> if (Precedence == PrecedenceArrowAndPeriod) {
> - LatestOperator->LastInChainOfCalls = true;
> // Call expressions don't have a binary operator precedence.
> addFakeParenthesis(Start, prec::Unknown);
> } else {
> @@ -1017,8 +1018,11 @@ public:
> next();
> } else {
> // Operator found.
> - if (CurrentPrecedence == Precedence)
> + if (CurrentPrecedence == Precedence) {
> LatestOperator = Current;
> + Current->OperatorIndex = OperatorIndex;
> + ++OperatorIndex;
> + }
>
> next();
> }
>
> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=206384&r1=206383&r2=206384&view=diff
>
> ==============================================================================
> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
> +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Apr 16 07:26:54 2014
> @@ -3983,6 +3983,18 @@ TEST_F(FormatTest, AlignsPipes) {
> "aaaaaaaa << (aaaaaaaaaaaaaaaaaaa <<
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
> " <<
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n"
> " << aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;");
> + verifyFormat(
> + "llvm::errs() << \"a: \" << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
> + " aaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
> + " aaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
> + verifyFormat(
> + "llvm::errs() << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
> + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
> + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n"
> + " << bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;");
> + verifyFormat(
> + "llvm::errs() << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
> + " aaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
>
> verifyFormat("return out << \"somepacket = {\\n\"\n"
> " << \" aaaaaa = \" << pkt.aaaaaa << \"\\n\"\n"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140416/63cb01d2/attachment.html>
More information about the cfe-commits
mailing list