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