summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Format/TokenAnnotator.cpp9
-rw-r--r--clang/unittests/Format/FormatTest.cpp28
2 files changed, 34 insertions, 3 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 0c417238213..a1073c8d607 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -2196,7 +2196,8 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) {
if (Current->is(TT_LineComment)) {
if (Current->Previous->BlockKind == BK_BracedInit &&
Current->Previous->opensScope())
- Current->SpacesRequiredBefore = Style.Cpp11BracedListStyle ? 0 : 1;
+ Current->SpacesRequiredBefore =
+ (Style.Cpp11BracedListStyle && !Style.SpacesInParentheses) ? 0 : 1;
else
Current->SpacesRequiredBefore = Style.SpacesBeforeTrailingComments;
@@ -2520,7 +2521,9 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
return Left.is(tok::hash);
if (Left.isOneOf(tok::hashhash, tok::hash))
return Right.is(tok::hash);
- if (Left.is(tok::l_paren) && Right.is(tok::r_paren))
+ if ((Left.is(tok::l_paren) && Right.is(tok::r_paren)) ||
+ (Left.is(tok::l_brace) && Left.BlockKind != BK_Block &&
+ Right.is(tok::r_brace) && Right.BlockKind != BK_Block))
return Style.SpaceInEmptyParentheses;
if (Left.is(tok::l_paren) || Right.is(tok::r_paren))
return (Right.is(TT_CastRParen) ||
@@ -2636,7 +2639,7 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
if ((Left.is(tok::l_brace) && Left.BlockKind != BK_Block) ||
(Right.is(tok::r_brace) && Right.MatchingParen &&
Right.MatchingParen->BlockKind != BK_Block))
- return !Style.Cpp11BracedListStyle;
+ return Style.Cpp11BracedListStyle ? Style.SpacesInParentheses : true;
if (Left.is(TT_BlockComment))
// No whitespace in x(/*foo=*/1), except for JavaScript.
return Style.Language == FormatStyle::LK_JavaScript ||
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 14ac6f91372..d31ec30ade4 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -8214,6 +8214,34 @@ TEST_F(FormatTest, LayoutCxx11BraceInitializers) {
SpaceBeforeBrace.SpaceBeforeCpp11BracedList = true;
verifyFormat("vector<int> x {1, 2, 3, 4};", SpaceBeforeBrace);
verifyFormat("f({}, {{}, {}}, MyMap[{k, v}]);", SpaceBeforeBrace);
+
+ FormatStyle SpaceBetweenBraces = getLLVMStyle();
+ SpaceBetweenBraces.SpacesInAngles = true;
+ SpaceBetweenBraces.SpacesInParentheses = true;
+ SpaceBetweenBraces.SpacesInSquareBrackets = true;
+ verifyFormat("vector< int > x{ 1, 2, 3, 4 };", SpaceBetweenBraces);
+ verifyFormat("f( {}, { {}, {} }, MyMap[ { k, v } ] );", SpaceBetweenBraces);
+ verifyFormat("vector< int > x{ // comment 1\n"
+ " 1, 2, 3, 4 };",
+ SpaceBetweenBraces);
+ SpaceBetweenBraces.ColumnLimit = 20;
+ EXPECT_EQ("vector< int > x{\n"
+ " 1, 2, 3, 4 };",
+ format("vector<int>x{1,2,3,4};", SpaceBetweenBraces));
+ SpaceBetweenBraces.ColumnLimit = 24;
+ EXPECT_EQ("vector< int > x{ 1, 2,\n"
+ " 3, 4 };",
+ format("vector<int>x{1,2,3,4};", SpaceBetweenBraces));
+ EXPECT_EQ("vector< int > x{\n"
+ " 1,\n"
+ " 2,\n"
+ " 3,\n"
+ " 4,\n"
+ "};",
+ format("vector<int>x{1,2,3,4,};", SpaceBetweenBraces));
+ verifyFormat("vector< int > x{};", SpaceBetweenBraces);
+ SpaceBetweenBraces.SpaceInEmptyParentheses = true;
+ verifyFormat("vector< int > x{ };", SpaceBetweenBraces);
}
TEST_F(FormatTest, FormatsBracedListsInColumnLayout) {
OpenPOWER on IntegriCloud