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