r176352 - Normal indent for last element of builder-type call.

Daniel Jasper djasper at google.com
Fri Mar 1 09:21:18 PST 2013


s/laster/latest/


On Fri, Mar 1, 2013 at 5:48 PM, Daniel Jasper <djasper at google.com> wrote:

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


More information about the cfe-commits mailing list