Hi,
the attached patch adds a new option to clang-format: SpaceBeforeBrackets.
This adds a space before the first bracket, i.e. int a[] -> int a [];
while multi-dimensional arrays remain together (int a[][]; -> int a
[][];).
Cheers,
Matthäus
Index: include/clang/Format/Format.h
===================================================================
--- include/clang/Format/Format.h (revision 224429)
+++ include/clang/Format/Format.h (working copy)
@@ -353,6 +353,9 @@
/// \brief If \c true, spaces will be inserted after '[' and before ']'.
bool SpacesInSquareBrackets;
+ /// \brief If \c true, a space will be inserted between identifer and '['.
+ bool SpaceBeforeBrackets;
+
/// \brief If \c true, spaces may be inserted into '()'.
bool SpaceInEmptyParentheses;
@@ -470,6 +473,7 @@
SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
SpaceBeforeParens == R.SpaceBeforeParens &&
+ SpaceBeforeBrackets == R.SpaceBeforeBrackets &&
SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
ContinuationIndentWidth == R.ContinuationIndentWidth &&
CommentPragmas == R.CommentPragmas &&
Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp (revision 224429)
+++ lib/Format/Format.cpp (working copy)
@@ -252,6 +252,7 @@
Style.SpacesInContainerLiterals);
IO.mapOptional("SpaceBeforeAssignmentOperators",
Style.SpaceBeforeAssignmentOperators);
+ IO.mapOptional("SpaceBeforeBrackets", Style.SpaceBeforeBrackets);
IO.mapOptional("ContinuationIndentWidth", Style.ContinuationIndentWidth);
IO.mapOptional("CommentPragmas", Style.CommentPragmas);
IO.mapOptional("ForEachMacros", Style.ForEachMacros);
@@ -379,6 +380,7 @@
LLVMStyle.SpaceAfterCStyleCast = false;
LLVMStyle.SpaceBeforeParens = FormatStyle::SBPO_ControlStatements;
LLVMStyle.SpaceBeforeAssignmentOperators = true;
+ LLVMStyle.SpaceBeforeBrackets = false;
LLVMStyle.SpacesInAngles = false;
LLVMStyle.PenaltyBreakComment = 300;
Index: lib/Format/TokenAnnotator.cpp
===================================================================
--- lib/Format/TokenAnnotator.cpp (revision 224429)
+++ lib/Format/TokenAnnotator.cpp (working copy)
@@ -1659,7 +1659,8 @@
Right.MatchingParen->is(TT_ArraySubscriptLSquare)));
if (Right.is(tok::l_square) &&
!Right.isOneOf(TT_ObjCMethodExpr, TT_LambdaLSquare) &&
- !Left.isOneOf(tok::numeric_constant, TT_DictLiteral))
+ !Left.isOneOf(tok::numeric_constant, TT_DictLiteral) &&
+ !(!Left.is(tok::r_square) && Style.SpaceBeforeBrackets))
return false;
if (Left.is(tok::colon))
return !Left.is(TT_ObjCMethodExpr);
Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp (revision 224429)
+++ unittests/Format/FormatTest.cpp (working copy)
@@ -7989,6 +7989,24 @@
verifyFormat("int f () throw (Deprecated);", Space);
}
+TEST_F(FormatTest, ConfigurableSpaceBeforeBrackets) {
+ FormatStyle NoSpace = getLLVMStyle();
+ NoSpace.SpaceBeforeBrackets = false;
+
+ verifyFormat("int a[1];", NoSpace);
+ verifyFormat("int a[1][2];", NoSpace);
+ verifyFormat("a[7] = 5;", NoSpace);
+ verifyFormat("int a = (f())[23];", NoSpace);
+
+ FormatStyle Space = getLLVMStyle();
+ Space.SpaceBeforeBrackets = true;
+
+ verifyFormat("int a [1];", Space);
+ verifyFormat("int a [1][2];", Space);
+ verifyFormat("a [7] = 5;", Space);
+ verifyFormat("int a = (f()) [23];", Space);
+}
+
TEST_F(FormatTest, ConfigurableSpacesInParentheses) {
FormatStyle Spaces = getLLVMStyle();
@@ -8683,6 +8701,7 @@
CHECK_PARSE_BOOL(SpacesInCStyleCastParentheses);
CHECK_PARSE_BOOL(SpaceAfterCStyleCast);
CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators);
+ CHECK_PARSE_BOOL(SpaceBeforeBrackets);
}
#undef CHECK_PARSE_BOOL
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits