r332436 - clang-format: Allow optimizer to break template declaration.

Eric Liu via cfe-commits cfe-commits at lists.llvm.org
Wed May 16 06:02:42 PDT 2018


This should be fixed by r332465

On Wed, May 16, 2018 at 2:50 PM Eric Liu <ioeric at google.com> wrote:

> OK, I'll send a fix for the index test. Please make sure you run all clang
> tests (`ninja check-clang` and `ninja check-clang-tools`) before landing a
> patch! Thanks!
>
> On Wed, May 16, 2018 at 2:32 PM Eric Liu <ioeric at google.com> wrote:
>
>> I can also reproduce on my local machine (Debian).
>>
>> On Wed, May 16, 2018 at 1:01 PM David Zarzycki via cfe-commits <
>> cfe-commits at lists.llvm.org> wrote:
>>
>>> This change broke `test/Index/overriding-ftemplate-comments.cpp` on Red
>>> Hat Fedora 28. Was this expected?
>>>
>>> > On May 16, 2018, at 4:25 AM, Francois Ferrand via cfe-commits <
>>> cfe-commits at lists.llvm.org> wrote:
>>> >
>>> > Author: typz
>>> > Date: Wed May 16 01:25:03 2018
>>> > New Revision: 332436
>>> >
>>> > URL: http://llvm.org/viewvc/llvm-project?rev=332436&view=rev
>>> > Log:
>>> > clang-format: Allow optimizer to break template declaration.
>>> >
>>> > Summary:
>>> > Introduce `PenaltyBreakTemplateDeclaration` to control the penalty,
>>> > and change `AlwaysBreakTemplateDeclarations` to an enum with 3 modes:
>>> > * `No` for regular, penalty based, wrapping of template declaration
>>> > * `MultiLine` for always wrapping before multi-line declarations (e.g.
>>> >  same as legacy behavior when `AlwaysBreakTemplateDeclarations=false`)
>>> > * `Yes` for always wrapping (e.g. same as legacy behavior when
>>> >  `AlwaysBreakTemplateDeclarations=true`)
>>> >
>>> > Reviewers: krasimir, djasper, klimek
>>> >
>>> > Subscribers: cfe-commits
>>> >
>>> > Differential Revision: https://reviews.llvm.org/D42684
>>> >
>>> > Modified:
>>> >    cfe/trunk/docs/ClangFormatStyleOptions.rst
>>> >    cfe/trunk/include/clang/Format/Format.h
>>> >    cfe/trunk/lib/Format/ContinuationIndenter.cpp
>>> >    cfe/trunk/lib/Format/Format.cpp
>>> >    cfe/trunk/lib/Format/TokenAnnotator.cpp
>>> >    cfe/trunk/unittests/Format/FormatTest.cpp
>>> >
>>> > Modified: cfe/trunk/docs/ClangFormatStyleOptions.rst
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangFormatStyleOptions.rst?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/docs/ClangFormatStyleOptions.rst (original)
>>> > +++ cfe/trunk/docs/ClangFormatStyleOptions.rst Wed May 16 01:25:03 2018
>>> > @@ -490,15 +490,50 @@ the configuration (without a prefix: ``A
>>> >          "bbbb"                                    "cccc";
>>> >          "cccc";
>>> >
>>> > -**AlwaysBreakTemplateDeclarations** (``bool``)
>>> > -  If ``true``, always break after the ``template<...>`` of a template
>>> > -  declaration.
>>> > +**AlwaysBreakTemplateDeclarations**
>>> (``BreakTemplateDeclarationsStyle``)
>>> > +  The template declaration breaking style to use.
>>> > +
>>> > +  Possible values:
>>> > +
>>> > +  * ``BTDS_No`` (in configuration: ``No``)
>>> > +    Do not force break before declaration.
>>> > +    ``PenaltyBreakTemplateDeclaration`` is taken into account.
>>> > +
>>> > +    .. code-block:: c++
>>> > +
>>> > +       template <typename T> T foo() {
>>> > +       }
>>> > +       template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +                                   int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +       }
>>> > +
>>> > +  * ``BTDS_MultiLine`` (in configuration: ``MultiLine``)
>>> > +    Force break after template declaration only when the following
>>> > +    declaration spans multiple lines.
>>> > +
>>> > +    .. code-block:: c++
>>> > +
>>> > +       template <typename T> T foo() {
>>> > +       }
>>> > +       template <typename T>
>>> > +       T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +             int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +       }
>>> > +
>>> > +  * ``BTDS_Yes`` (in configuration: ``Yes``)
>>> > +    Always break after template declaration.
>>> > +
>>> > +    .. code-block:: c++
>>> > +
>>> > +       template <typename T>
>>> > +       T foo() {
>>> > +       }
>>> > +       template <typename T>
>>> > +       T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +             int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +       }
>>> >
>>> > -  .. code-block:: c++
>>> >
>>> > -     true:                                  false:
>>> > -     template <typename T>          vs.     template <typename T>
>>> class C {};
>>> > -     class C {};
>>> >
>>> > **BinPackArguments** (``bool``)
>>> >   If ``false``, a function call's arguments will either be all on the
>>> > @@ -1590,6 +1625,9 @@ the configuration (without a prefix: ``A
>>> > **PenaltyBreakString** (``unsigned``)
>>> >   The penalty for each line break introduced inside a string literal.
>>> >
>>> > +**PenaltyBreakTemplateDeclaration** (``unsigned``)
>>> > +  The penalty for breaking after template declaration.
>>> > +
>>> > **PenaltyExcessCharacter** (``unsigned``)
>>> >   The penalty for each character outside of the column limit.
>>> >
>>> >
>>> > Modified: cfe/trunk/include/clang/Format/Format.h
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/include/clang/Format/Format.h (original)
>>> > +++ cfe/trunk/include/clang/Format/Format.h Wed May 16 01:25:03 2018
>>> > @@ -351,14 +351,44 @@ struct FormatStyle {
>>> >   /// \endcode
>>> >   bool AlwaysBreakBeforeMultilineStrings;
>>> >
>>> > -  /// If ``true``, always break after the ``template<...>`` of a
>>> template
>>> > -  /// declaration.
>>> > -  /// \code
>>> > -  ///    true:                                  false:
>>> > -  ///    template <typename T>          vs.     template <typename T>
>>> class C {};
>>> > -  ///    class C {};
>>> > -  /// \endcode
>>> > -  bool AlwaysBreakTemplateDeclarations;
>>> > +  /// Different ways to break after the template declaration.
>>> > +  enum BreakTemplateDeclarationsStyle {
>>> > +      /// Do not force break before declaration.
>>> > +      /// ``PenaltyBreakTemplateDeclaration`` is taken into account.
>>> > +      /// \code
>>> > +      ///    template <typename T> T foo() {
>>> > +      ///    }
>>> > +      ///    template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +      ///                                int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +      ///    }
>>> > +      /// \endcode
>>> > +      BTDS_No,
>>> > +      /// Force break after template declaration only when the
>>> following
>>> > +      /// declaration spans multiple lines.
>>> > +      /// \code
>>> > +      ///    template <typename T> T foo() {
>>> > +      ///    }
>>> > +      ///    template <typename T>
>>> > +      ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +      ///          int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +      ///    }
>>> > +      /// \endcode
>>> > +      BTDS_MultiLine,
>>> > +      /// Always break after template declaration.
>>> > +      /// \code
>>> > +      ///    template <typename T>
>>> > +      ///    T foo() {
>>> > +      ///    }
>>> > +      ///    template <typename T>
>>> > +      ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
>>> > +      ///          int bbbbbbbbbbbbbbbbbbbbb) {
>>> > +      ///    }
>>> > +      /// \endcode
>>> > +      BTDS_Yes
>>> > +  };
>>> > +
>>> > +  /// The template declaration breaking style to use.
>>> > +  BreakTemplateDeclarationsStyle AlwaysBreakTemplateDeclarations;
>>> >
>>> >   /// If ``false``, a function call's arguments will either be all on
>>> the
>>> >   /// same line or will have one line each.
>>> > @@ -1295,6 +1325,9 @@ struct FormatStyle {
>>> >   /// The penalty for each line break introduced inside a string
>>> literal.
>>> >   unsigned PenaltyBreakString;
>>> >
>>> > +  /// The penalty for breaking after template declaration.
>>> > +  unsigned PenaltyBreakTemplateDeclaration;
>>> > +
>>> >   /// The penalty for each character outside of the column limit.
>>> >   unsigned PenaltyExcessCharacter;
>>> >
>>> > @@ -1679,6 +1712,8 @@ struct FormatStyle {
>>> >            PenaltyBreakString == R.PenaltyBreakString &&
>>> >            PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
>>> >            PenaltyReturnTypeOnItsOwnLine ==
>>> R.PenaltyReturnTypeOnItsOwnLine &&
>>> > +           PenaltyBreakTemplateDeclaration ==
>>> > +               R.PenaltyBreakTemplateDeclaration &&
>>> >            PointerAlignment == R.PointerAlignment &&
>>> >            RawStringFormats == R.RawStringFormats &&
>>> >            SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
>>> >
>>> > Modified: cfe/trunk/lib/Format/ContinuationIndenter.cpp
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/ContinuationIndenter.cpp?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/lib/Format/ContinuationIndenter.cpp (original)
>>> > +++ cfe/trunk/lib/Format/ContinuationIndenter.cpp Wed May 16 01:25:03
>>> 2018
>>> > @@ -402,6 +402,12 @@ bool ContinuationIndenter::mustBreak(con
>>> >         Style.Language == FormatStyle::LK_JavaScript))
>>> >     return true;
>>> >
>>> > +  // If the template declaration spans multiple lines, force wrap
>>> before the
>>> > +  // function/class declaration
>>> > +  if (Previous.ClosesTemplateDeclaration &&
>>> > +      State.Stack.back().BreakBeforeParameter)
>>> > +    return true;
>>> > +
>>> >   if (State.Column <= NewLineColumn)
>>> >     return false;
>>> >
>>> > @@ -453,7 +459,7 @@ bool ContinuationIndenter::mustBreak(con
>>> >     // for cases where the entire line does not fit on a single line
>>> as a
>>> >     // different LineFormatter would be used otherwise.
>>> >     if (Previous.ClosesTemplateDeclaration)
>>> > -      return true;
>>> > +      return Style.AlwaysBreakTemplateDeclarations !=
>>> FormatStyle::BTDS_No;
>>> >     if (Previous.is(TT_FunctionAnnotationRParen))
>>> >       return true;
>>> >     if (Previous.is(TT_LeadingJavaAnnotation) &&
>>> Current.isNot(tok::l_paren) &&
>>> >
>>> > Modified: cfe/trunk/lib/Format/Format.cpp
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/lib/Format/Format.cpp (original)
>>> > +++ cfe/trunk/lib/Format/Format.cpp Wed May 16 01:25:03 2018
>>> > @@ -169,6 +169,19 @@ struct ScalarEnumerationTraits<FormatSty
>>> > };
>>> >
>>> > template <>
>>> > +struct
>>> ScalarEnumerationTraits<FormatStyle::BreakTemplateDeclarationsStyle> {
>>> > +  static void enumeration(IO &IO,
>>> FormatStyle::BreakTemplateDeclarationsStyle &Value) {
>>> > +    IO.enumCase(Value, "No", FormatStyle::BTDS_No);
>>> > +    IO.enumCase(Value, "MultiLine", FormatStyle::BTDS_MultiLine);
>>> > +    IO.enumCase(Value, "Yes", FormatStyle::BTDS_Yes);
>>> > +
>>> > +    // For backward compatibility.
>>> > +    IO.enumCase(Value, "false", FormatStyle::BTDS_MultiLine);
>>> > +    IO.enumCase(Value, "true", FormatStyle::BTDS_Yes);
>>> > +  }
>>> > +};
>>> > +
>>> > +template <>
>>> > struct
>>> ScalarEnumerationTraits<FormatStyle::DefinitionReturnTypeBreakingStyle> {
>>> >   static void
>>> >   enumeration(IO &IO, FormatStyle::DefinitionReturnTypeBreakingStyle
>>> &Value) {
>>> > @@ -400,6 +413,8 @@ template <> struct MappingTraits<FormatS
>>> >     IO.mapOptional("PenaltyBreakFirstLessLess",
>>> >                    Style.PenaltyBreakFirstLessLess);
>>> >     IO.mapOptional("PenaltyBreakString", Style.PenaltyBreakString);
>>> > +    IO.mapOptional("PenaltyBreakTemplateDeclaration",
>>> > +                   Style.PenaltyBreakTemplateDeclaration);
>>> >     IO.mapOptional("PenaltyExcessCharacter",
>>> Style.PenaltyExcessCharacter);
>>> >     IO.mapOptional("PenaltyReturnTypeOnItsOwnLine",
>>> >                    Style.PenaltyReturnTypeOnItsOwnLine);
>>> > @@ -598,7 +613,7 @@ FormatStyle getLLVMStyle() {
>>> >   LLVMStyle.AlwaysBreakAfterReturnType = FormatStyle::RTBS_None;
>>> >   LLVMStyle.AlwaysBreakAfterDefinitionReturnType =
>>> FormatStyle::DRTBS_None;
>>> >   LLVMStyle.AlwaysBreakBeforeMultilineStrings = false;
>>> > -  LLVMStyle.AlwaysBreakTemplateDeclarations = false;
>>> > +  LLVMStyle.AlwaysBreakTemplateDeclarations =
>>> FormatStyle::BTDS_MultiLine;
>>> >   LLVMStyle.BinPackArguments = true;
>>> >   LLVMStyle.BinPackParameters = true;
>>> >   LLVMStyle.BreakBeforeBinaryOperators = FormatStyle::BOS_None;
>>> > @@ -670,6 +685,7 @@ FormatStyle getLLVMStyle() {
>>> >   LLVMStyle.PenaltyExcessCharacter = 1000000;
>>> >   LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 60;
>>> >   LLVMStyle.PenaltyBreakBeforeFirstCallParameter = 19;
>>> > +  LLVMStyle.PenaltyBreakTemplateDeclaration = prec::Relational;
>>> >
>>> >   LLVMStyle.DisableFormat = false;
>>> >   LLVMStyle.SortIncludes = true;
>>> > @@ -694,7 +710,7 @@ FormatStyle getGoogleStyle(FormatStyle::
>>> >   GoogleStyle.AllowShortIfStatementsOnASingleLine = true;
>>> >   GoogleStyle.AllowShortLoopsOnASingleLine = true;
>>> >   GoogleStyle.AlwaysBreakBeforeMultilineStrings = true;
>>> > -  GoogleStyle.AlwaysBreakTemplateDeclarations = true;
>>> > +  GoogleStyle.AlwaysBreakTemplateDeclarations = FormatStyle::BTDS_Yes;
>>> >   GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
>>> >   GoogleStyle.DerivePointerAlignment = true;
>>> >   GoogleStyle.IncludeStyle.IncludeCategories = {
>>> > @@ -819,7 +835,7 @@ FormatStyle getMozillaStyle() {
>>> >   MozillaStyle.AlwaysBreakAfterReturnType = FormatStyle::RTBS_TopLevel;
>>> >   MozillaStyle.AlwaysBreakAfterDefinitionReturnType =
>>> >       FormatStyle::DRTBS_TopLevel;
>>> > -  MozillaStyle.AlwaysBreakTemplateDeclarations = true;
>>> > +  MozillaStyle.AlwaysBreakTemplateDeclarations =
>>> FormatStyle::BTDS_Yes;
>>> >   MozillaStyle.BinPackParameters = false;
>>> >   MozillaStyle.BinPackArguments = false;
>>> >   MozillaStyle.BreakBeforeBraces = FormatStyle::BS_Mozilla;
>>> >
>>> > Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
>>> > +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed May 16 01:25:03 2018
>>> > @@ -2338,6 +2338,8 @@ unsigned TokenAnnotator::splitPenalty(co
>>> >       return 2;
>>> >     return 1;
>>> >   }
>>> > +  if (Left.ClosesTemplateDeclaration)
>>> > +    return Style.PenaltyBreakTemplateDeclaration;
>>> >   if (Left.is(TT_ConditionalExpr))
>>> >     return prec::Conditional;
>>> >   prec::Level Level = Left.getPrecedence();
>>> > @@ -2869,7 +2871,7 @@ bool TokenAnnotator::mustBreakBefore(con
>>> >   if (Right.Previous->ClosesTemplateDeclaration &&
>>> >       Right.Previous->MatchingParen &&
>>> >       Right.Previous->MatchingParen->NestingLevel == 0 &&
>>> > -      Style.AlwaysBreakTemplateDeclarations)
>>> > +      Style.AlwaysBreakTemplateDeclarations == FormatStyle::BTDS_Yes)
>>> >     return true;
>>> >   if (Right.is(TT_CtorInitializerComma) &&
>>> >       Style.BreakConstructorInitializers ==
>>> FormatStyle::BCIS_BeforeComma &&
>>> >
>>> > Modified: cfe/trunk/unittests/Format/FormatTest.cpp
>>> > URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=332436&r1=332435&r2=332436&view=diff
>>> >
>>> ==============================================================================
>>> > --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
>>> > +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed May 16 01:25:03 2018
>>> > @@ -5475,7 +5475,7 @@ TEST_F(FormatTest, WrapsTemplateDeclarat
>>> >                "    const typename aaaaaaaaaaaaaaaa
>>> aaaaaaaaaaaaaaaaaaa);");
>>> >
>>> >   FormatStyle AlwaysBreak = getLLVMStyle();
>>> > -  AlwaysBreak.AlwaysBreakTemplateDeclarations = true;
>>> > +  AlwaysBreak.AlwaysBreakTemplateDeclarations = FormatStyle::BTDS_Yes;
>>> >   verifyFormat("template <typename T>\nclass C {};", AlwaysBreak);
>>> >   verifyFormat("template <typename T>\nvoid f();", AlwaysBreak);
>>> >   verifyFormat("template <typename T>\nvoid f() {}", AlwaysBreak);
>>> > @@ -5493,6 +5493,32 @@ TEST_F(FormatTest, WrapsTemplateDeclarat
>>> >                "public:\n"
>>> >                "  E *f();\n"
>>> >                "};");
>>> > +
>>> > +  FormatStyle NeverBreak = getLLVMStyle();
>>> > +  NeverBreak.AlwaysBreakTemplateDeclarations = FormatStyle::BTDS_No;
>>> > +  verifyFormat("template <typename T> class C {};", NeverBreak);
>>> > +  verifyFormat("template <typename T> void f();", NeverBreak);
>>> > +  verifyFormat("template <typename T> void f() {}", NeverBreak);
>>> > +  verifyFormat("template <typename T>\nvoid
>>> foo(aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb) {}",
>>> > +               NeverBreak);
>>> > +  verifyFormat("void
>>> aaaaaaaaaaaaaaaaaaa<aaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
>>> > +               "
>>>  bbbbbbbbbbbbbbbbbbbbbbbbbbbb>(\n"
>>> > +               "
>>> ccccccccccccccccccccccccccccccccccccccccccccccc);",
>>> > +               NeverBreak);
>>> > +  verifyFormat("template <template <typename> class Fooooooo,\n"
>>> > +               "          template <typename> class Baaaaaaar>\n"
>>> > +               "struct C {};",
>>> > +               NeverBreak);
>>> > +  verifyFormat("template <typename T> // T can be A, B or C.\n"
>>> > +               "struct C {};",
>>> > +               NeverBreak);
>>> > +  verifyFormat("template <enum E> class A {\n"
>>> > +               "public:\n"
>>> > +               "  E *f();\n"
>>> > +               "};", NeverBreak);
>>> > +  NeverBreak.PenaltyBreakTemplateDeclaration = 100;
>>> > +  verifyFormat("template <typename T>
>>> void\nfoo(aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbb) {}",
>>> > +               NeverBreak);
>>> > }
>>> >
>>> > TEST_F(FormatTest, WrapsTemplateParameters) {
>>> > @@ -10440,7 +10466,6 @@ TEST_F(FormatTest, ParsesConfigurationBo
>>> >   CHECK_PARSE_BOOL(AllowShortCaseLabelsOnASingleLine);
>>> >   CHECK_PARSE_BOOL(AllowShortIfStatementsOnASingleLine);
>>> >   CHECK_PARSE_BOOL(AllowShortLoopsOnASingleLine);
>>> > -  CHECK_PARSE_BOOL(AlwaysBreakTemplateDeclarations);
>>> >   CHECK_PARSE_BOOL(BinPackArguments);
>>> >   CHECK_PARSE_BOOL(BinPackParameters);
>>> >   CHECK_PARSE_BOOL(BreakAfterJavaFieldAnnotations);
>>> > @@ -10506,6 +10531,8 @@ TEST_F(FormatTest, ParsesConfiguration)
>>> >               PenaltyBreakAssignment, 1234u);
>>> >   CHECK_PARSE("PenaltyBreakBeforeFirstCallParameter: 1234",
>>> >               PenaltyBreakBeforeFirstCallParameter, 1234u);
>>> > +  CHECK_PARSE("PenaltyBreakTemplateDeclaration: 1234",
>>> > +              PenaltyBreakTemplateDeclaration, 1234u);
>>> >   CHECK_PARSE("PenaltyExcessCharacter: 1234", PenaltyExcessCharacter,
>>> 1234u);
>>> >   CHECK_PARSE("PenaltyReturnTypeOnItsOwnLine: 1234",
>>> >               PenaltyReturnTypeOnItsOwnLine, 1234u);
>>> > @@ -10660,6 +10687,18 @@ TEST_F(FormatTest, ParsesConfiguration)
>>> >               AlwaysBreakAfterReturnType,
>>> >               FormatStyle::RTBS_TopLevelDefinitions);
>>> >
>>> > +  Style.AlwaysBreakTemplateDeclarations = FormatStyle::BTDS_Yes;
>>> > +  CHECK_PARSE("AlwaysBreakTemplateDeclarations: No",
>>> AlwaysBreakTemplateDeclarations,
>>> > +              FormatStyle::BTDS_No);
>>> > +  CHECK_PARSE("AlwaysBreakTemplateDeclarations: MultiLine",
>>> AlwaysBreakTemplateDeclarations,
>>> > +              FormatStyle::BTDS_MultiLine);
>>> > +  CHECK_PARSE("AlwaysBreakTemplateDeclarations: Yes",
>>> AlwaysBreakTemplateDeclarations,
>>> > +              FormatStyle::BTDS_Yes);
>>> > +  CHECK_PARSE("AlwaysBreakTemplateDeclarations: false",
>>> AlwaysBreakTemplateDeclarations,
>>> > +              FormatStyle::BTDS_MultiLine);
>>> > +  CHECK_PARSE("AlwaysBreakTemplateDeclarations: true",
>>> AlwaysBreakTemplateDeclarations,
>>> > +              FormatStyle::BTDS_Yes);
>>> > +
>>> >   Style.AlwaysBreakAfterDefinitionReturnType = FormatStyle::DRTBS_All;
>>> >   CHECK_PARSE("AlwaysBreakAfterDefinitionReturnType: None",
>>> >               AlwaysBreakAfterDefinitionReturnType,
>>> FormatStyle::DRTBS_None);
>>> >
>>> >
>>> > _______________________________________________
>>> > cfe-commits mailing list
>>> > cfe-commits at lists.llvm.org
>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180516/cab2d18c/attachment-0001.html>


More information about the cfe-commits mailing list