Author: djasper Date: Tue Aug 26 06:41:14 2014 New Revision: 216449 URL: http://llvm.org/viewvc/llvm-project?rev=216449&view=rev Log: clang-format: New option SpacesInSquareBrackets.
Before: int a[5]; a[3] += 42; After: int a[ 5 ]; a[ 3 ] += 42; Fixes LLVM bug #17887 (http://llvm.org/bugs/show_bug.cgi?id=17887). Patch by Marek Kurdej, thank you! Modified: cfe/trunk/docs/ClangFormatStyleOptions.rst cfe/trunk/include/clang/Format/Format.h 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=216449&r1=216448&r2=216449&view=diff ============================================================================== --- cfe/trunk/docs/ClangFormatStyleOptions.rst (original) +++ cfe/trunk/docs/ClangFormatStyleOptions.rst Tue Aug 26 06:41:14 2014 @@ -418,6 +418,10 @@ the configuration (without a prefix: ``A **SpacesInParentheses** (``bool``) If ``true``, spaces will be inserted after '(' and before ')'. +**SpacesInSquareBrackets** (``bool``) + If ``true``, spaces will be inserted after '[' and before ']' in array + declarations and element access expressions, but not in lambdas. + **Standard** (``LanguageStandard``) Format compatible with this standard, e.g. use ``A<A<int> >`` instead of ``A<A<int>>`` for LS_Cpp03. Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=216449&r1=216448&r2=216449&view=diff ============================================================================== --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Tue Aug 26 06:41:14 2014 @@ -311,6 +311,9 @@ struct FormatStyle { /// template argument lists bool SpacesInAngles; + /// \brief If \c true, spaces will be inserted after '[' and before ']'. + bool SpacesInSquareBrackets; + /// \brief If \c true, spaces may be inserted into '()'. bool SpaceInEmptyParentheses; @@ -414,6 +417,7 @@ struct FormatStyle { Cpp11BracedListStyle == R.Cpp11BracedListStyle && Standard == R.Standard && TabWidth == R.TabWidth && UseTab == R.UseTab && SpacesInParentheses == R.SpacesInParentheses && + SpacesInSquareBrackets == R.SpacesInSquareBrackets && SpacesInAngles == R.SpacesInAngles && SpaceInEmptyParentheses == R.SpaceInEmptyParentheses && SpacesInContainerLiterals == R.SpacesInContainerLiterals && Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=216449&r1=216448&r2=216449&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Tue Aug 26 06:41:14 2014 @@ -223,6 +223,7 @@ template <> struct MappingTraits<FormatS IO.mapOptional("UseTab", Style.UseTab); IO.mapOptional("BreakBeforeBraces", Style.BreakBeforeBraces); IO.mapOptional("SpacesInParentheses", Style.SpacesInParentheses); + IO.mapOptional("SpacesInSquareBrackets", Style.SpacesInSquareBrackets); IO.mapOptional("SpacesInAngles", Style.SpacesInAngles); IO.mapOptional("SpaceInEmptyParentheses", Style.SpaceInEmptyParentheses); IO.mapOptional("SpacesInCStyleCastParentheses", @@ -346,6 +347,7 @@ FormatStyle getLLVMStyle() { LLVMStyle.Standard = FormatStyle::LS_Cpp11; LLVMStyle.UseTab = FormatStyle::UT_Never; LLVMStyle.SpacesInParentheses = false; + LLVMStyle.SpacesInSquareBrackets = false; LLVMStyle.SpaceInEmptyParentheses = false; LLVMStyle.SpacesInContainerLiterals = true; LLVMStyle.SpacesInCStyleCastParentheses = false; Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=216449&r1=216448&r2=216449&view=diff ============================================================================== --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original) +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Tue Aug 26 06:41:14 2014 @@ -1550,11 +1550,16 @@ bool TokenAnnotator::spaceRequiredBetwee if (Right.is(tok::star) && Left.is(tok::l_paren)) return false; if (Left.is(tok::l_square)) - return Left.Type == TT_ArrayInitializerLSquare && - Style.SpacesInContainerLiterals && Right.isNot(tok::r_square); + return (Left.Type == TT_ArrayInitializerLSquare && + Style.SpacesInContainerLiterals && Right.isNot(tok::r_square)) || + (Left.Type == TT_ArraySubscriptLSquare && + Style.SpacesInSquareBrackets && Right.isNot(tok::r_square)); if (Right.is(tok::r_square)) - return Right.MatchingParen && Style.SpacesInContainerLiterals && - Right.MatchingParen->Type == TT_ArrayInitializerLSquare; + return Right.MatchingParen && + ((Style.SpacesInContainerLiterals && + Right.MatchingParen->Type == TT_ArrayInitializerLSquare) || + (Style.SpacesInSquareBrackets && + Right.MatchingParen->Type == TT_ArraySubscriptLSquare)); if (Right.is(tok::l_square) && Right.Type != TT_ObjCMethodExpr && Right.Type != TT_LambdaLSquare && Left.isNot(tok::numeric_constant) && Left.Type != TT_DictLiteral) Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=216449&r1=216448&r2=216449&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Tue Aug 26 06:41:14 2014 @@ -7705,6 +7705,28 @@ TEST_F(FormatTest, ConfigurableSpacesInP "}", Spaces); } +TEST_F(FormatTest, ConfigurableSpacesInSquareBrackets) { + verifyFormat("int a[5];"); + verifyFormat("a[3] += 42;"); + + FormatStyle Spaces = getLLVMStyle(); + Spaces.SpacesInSquareBrackets = true; + // Lambdas unchanged. + verifyFormat("int c = []() -> int { return 2; }();\n", Spaces); + verifyFormat("return [i, args...] {};", Spaces); + + // Not lambdas. + verifyFormat("int a[ 5 ];", Spaces); + verifyFormat("a[ 3 ] += 42;", Spaces); + verifyFormat("constexpr char hello[]{\"hello\"};", Spaces); + verifyFormat("double &operator[](int i) { return 0; }\n" + "int i;", + Spaces); + verifyFormat("std::unique_ptr<int[]> foo() {}", Spaces); + verifyFormat("int i = a[ a ][ a ]->f();", Spaces); + verifyFormat("int i = (*b)[ a ]->f();", Spaces); +} + TEST_F(FormatTest, ConfigurableSpaceBeforeAssignmentOperators) { verifyFormat("int a = 5;"); verifyFormat("a += 42;"); @@ -8261,6 +8283,7 @@ TEST_F(FormatTest, ParsesConfigurationBo CHECK_PARSE_BOOL(ObjCSpaceBeforeProtocolList); CHECK_PARSE_BOOL(Cpp11BracedListStyle); CHECK_PARSE_BOOL(SpacesInParentheses); + CHECK_PARSE_BOOL(SpacesInSquareBrackets); CHECK_PARSE_BOOL(SpacesInAngles); CHECK_PARSE_BOOL(SpaceInEmptyParentheses); CHECK_PARSE_BOOL(SpacesInContainerLiterals); _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
