r182570 - Improve formatting of braced lists.
Daniel Jasper
djasper at google.com
Thu May 23 03:15:45 PDT 2013
Author: djasper
Date: Thu May 23 05:15:45 2013
New Revision: 182570
URL: http://llvm.org/viewvc/llvm-project?rev=182570&view=rev
Log:
Improve formatting of braced lists.
Before:
vector<int> x { 1, 2, 3 };
After:
vector<int> x{ 1, 2, 3 };
Also add a style option to remove the spaces inside braced lists,
so that the above becomes:
std::vector<int> v{1, 2, 3};
Modified:
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/include/clang/Format/Format.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=182570&r1=182569&r2=182570&view=diff
==============================================================================
--- cfe/trunk/include/clang/Format/Format.h (original)
+++ cfe/trunk/include/clang/Format/Format.h Thu May 23 05:15:45 2013
@@ -118,6 +118,9 @@ struct FormatStyle {
/// \brief The brace breaking style to use.
BraceBreakingStyle BreakBeforeBraces;
+ /// \brief If \c true, format { 1 }, otherwise {1}.
+ bool SpacesInBracedLists;
+
bool operator==(const FormatStyle &R) const {
return AccessModifierOffset == R.AccessModifierOffset &&
AlignEscapedNewlinesLeft == R.AlignEscapedNewlinesLeft &&
@@ -126,21 +129,22 @@ struct FormatStyle {
AllowShortIfStatementsOnASingleLine ==
R.AllowShortIfStatementsOnASingleLine &&
BinPackParameters == R.BinPackParameters &&
+ BreakBeforeBraces == R.BreakBeforeBraces &&
ColumnLimit == R.ColumnLimit &&
ConstructorInitializerAllOnOneLineOrOnePerLine ==
R.ConstructorInitializerAllOnOneLineOrOnePerLine &&
DerivePointerBinding == R.DerivePointerBinding &&
IndentCaseLabels == R.IndentCaseLabels &&
+ IndentWidth == R.IndentWidth &&
MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
PointerBindsToType == R.PointerBindsToType &&
SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
+ SpacesInBracedLists == R.SpacesInBracedLists &&
Standard == R.Standard &&
- IndentWidth == R.IndentWidth &&
- UseTab == R.UseTab &&
- BreakBeforeBraces == R.BreakBeforeBraces;
+ UseTab == R.UseTab;
}
};
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=182570&r1=182569&r2=182570&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Thu May 23 05:15:45 2013
@@ -100,6 +100,8 @@ template <> struct MappingTraits<clang::
IO.mapOptional("PointerBindsToType", Style.PointerBindsToType);
IO.mapOptional("SpacesBeforeTrailingComments",
Style.SpacesBeforeTrailingComments);
+ IO.mapOptional("SpacesInBracedLists",
+ Style.SpacesInBracedLists);
IO.mapOptional("Standard", Style.Standard);
IO.mapOptional("IndentWidth", Style.IndentWidth);
IO.mapOptional("UseTab", Style.UseTab);
@@ -130,6 +132,7 @@ FormatStyle getLLVMStyle() {
LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 75;
LLVMStyle.PointerBindsToType = false;
LLVMStyle.SpacesBeforeTrailingComments = 1;
+ LLVMStyle.SpacesInBracedLists = true;
LLVMStyle.Standard = FormatStyle::LS_Cpp03;
LLVMStyle.IndentWidth = 2;
LLVMStyle.UseTab = false;
@@ -155,6 +158,7 @@ FormatStyle getGoogleStyle() {
GoogleStyle.PenaltyReturnTypeOnItsOwnLine = 200;
GoogleStyle.PointerBindsToType = true;
GoogleStyle.SpacesBeforeTrailingComments = 2;
+ GoogleStyle.SpacesInBracedLists = false;
GoogleStyle.Standard = FormatStyle::LS_Auto;
GoogleStyle.IndentWidth = 2;
GoogleStyle.UseTab = false;
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=182570&r1=182569&r2=182570&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Thu May 23 05:15:45 2013
@@ -1089,6 +1089,11 @@ bool TokenAnnotator::spaceRequiredBetwee
Right.FormatTok.Tok.getObjCKeywordID() != tok::objc_not_keyword)
return false;
if (Left.is(tok::l_brace) && Right.is(tok::r_brace))
+ return false; // No spaces in "{}".
+ if (Left.is(tok::l_brace) || Right.is(tok::r_brace))
+ return Style.SpacesInBracedLists;
+ if (Left.is(tok::identifier) && Right.is(tok::l_brace) &&
+ Right.getNextNoneComment())
return false;
if (Right.is(tok::ellipsis))
return false;
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=182570&r1=182569&r2=182570&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Thu May 23 05:15:45 2013
@@ -947,11 +947,11 @@ TEST_F(FormatTest, CommentsInStaticIniti
" // comment for bb....\n"
" bbbbbbbbbbb, ccccccccccc };");
verifyGoogleFormat(
- "static SomeType type = { aaaaaaaaaaa, // comment for aa...\n"
- " bbbbbbbbbbb, ccccccccccc };");
- verifyGoogleFormat("static SomeType type = { aaaaaaaaaaa,\n"
- " // comment for bb....\n"
- " bbbbbbbbbbb, ccccccccccc };");
+ "static SomeType type = {aaaaaaaaaaa, // comment for aa...\n"
+ " bbbbbbbbbbb, ccccccccccc};");
+ verifyGoogleFormat("static SomeType type = {aaaaaaaaaaa,\n"
+ " // comment for bb....\n"
+ " bbbbbbbbbbb, ccccccccccc};");
verifyFormat("S s = { { a, b, c }, // Group #1\n"
" { d, e, f }, // Group #2\n"
@@ -1189,9 +1189,9 @@ TEST_F(FormatTest, StaticInitializers) {
// Allow bin-packing in static initializers as this would often lead to
// terrible results, e.g.:
verifyGoogleFormat(
- "static SomeClass = { a, b, c, d, e, f, g, h, i, j,\n"
- " looooooooooooooooooooooooooooooooooongname,\n"
- " looooooooooooooooooooooooooooooong };");
+ "static SomeClass = {a, b, c, d, e, f, g, h, i, j,\n"
+ " looooooooooooooooooooooooooooooooooongname,\n"
+ " looooooooooooooooooooooooooooooong};");
// Here, everything other than the "}" would fit on a line.
verifyFormat("static int LooooooooooooooooooooooooongVariable[1] = {\n"
" 100000000000000000000000\n"
@@ -1216,10 +1216,10 @@ TEST_F(FormatTest, NestedStaticInitializ
" { kGlobalRef, CANCELLED_CODE, NULL, NULL, NULL },\n"
" { kGlobalRef, UNKNOWN_CODE, NULL, NULL, NULL }\n"
"};");
- verifyGoogleFormat("somes Status::global_reps[3] = {\n"
- " { kGlobalRef, OK_CODE, NULL, NULL, NULL },\n"
- " { kGlobalRef, CANCELLED_CODE, NULL, NULL, NULL },\n"
- " { kGlobalRef, UNKNOWN_CODE, NULL, NULL, NULL }\n"
+ verifyGoogleFormat("SomeType Status::global_reps[3] = {\n"
+ " {kGlobalRef, OK_CODE, NULL, NULL, NULL},\n"
+ " {kGlobalRef, CANCELLED_CODE, NULL, NULL, NULL},\n"
+ " {kGlobalRef, UNKNOWN_CODE, NULL, NULL, NULL}\n"
"};");
verifyFormat(
"CGRect cg_rect = { { rect.fLeft, rect.fTop },\n"
@@ -1238,6 +1238,12 @@ TEST_F(FormatTest, NestedStaticInitializ
" 222222222222222222222222222222,\n"
" 333333333333333333333333333333 } },\n"
" { { 1, 2, 3 } }, { { 1, 2, 3 } } };");
+ verifyGoogleFormat(
+ "SomeArrayOfSomeType a = {{{1, 2, 3}}, {{1, 2, 3}},\n"
+ " {{111111111111111111111111111111,\n"
+ " 222222222222222222222222222222,\n"
+ " 333333333333333333333333333333}},\n"
+ " {{1, 2, 3}}, {{1, 2, 3}}};");
// FIXME: We might at some point want to handle this similar to parameter
// lists, where we have an option to put each on a single line.
@@ -3101,11 +3107,19 @@ TEST_F(FormatTest, LayoutBraceInitialize
}
TEST_F(FormatTest, LayoutCxx11ConstructorBraceInitializers) {
- verifyFormat("vector<int> x { 1, 2, 3, 4 };");
- verifyFormat("vector<T> x { {}, {}, {}, {} };");
+ verifyFormat("vector<int> x{ 1, 2, 3, 4 };");
+ verifyFormat("vector<T> x{ {}, {}, {}, {} };");
verifyFormat("f({ 1, 2 });");
- verifyFormat("auto v = Foo { 1 };");
+ verifyFormat("auto v = Foo{ 1 };");
verifyFormat("f({ 1, 2 }, { { 2, 3 }, { 4, 5 } }, c, { d });");
+
+ FormatStyle NoSpaces = getLLVMStyle();
+ NoSpaces.SpacesInBracedLists = false;
+ verifyFormat("vector<int> x{1, 2, 3, 4};", NoSpaces);
+ verifyFormat("vector<T> x{{}, {}, {}, {}};", NoSpaces);
+ verifyFormat("f({1, 2});", NoSpaces);
+ verifyFormat("auto v = Foo{1};", NoSpaces);
+ verifyFormat("f({1, 2}, {{2, 3}, {4, 5}}, c, {d});", NoSpaces);
}
TEST_F(FormatTest, LayoutTokensFollowingBlockInParentheses) {
@@ -4312,6 +4326,7 @@ TEST_F(FormatTest, ParsesConfiguration)
CHECK_PARSE_BOOL(IndentCaseLabels);
CHECK_PARSE_BOOL(ObjCSpaceBeforeProtocolList);
CHECK_PARSE_BOOL(PointerBindsToType);
+ CHECK_PARSE_BOOL(SpacesInBracedLists);
CHECK_PARSE_BOOL(UseTab);
CHECK_PARSE("AccessModifierOffset: -1234", AccessModifierOffset, -1234);
More information about the cfe-commits
mailing list