diff options
| author | Daniel Jasper <djasper@google.com> | 2015-05-08 13:51:14 +0000 |
|---|---|---|
| committer | Daniel Jasper <djasper@google.com> | 2015-05-08 13:51:14 +0000 |
| commit | e4c16c7ce354e260775f8dbf62f1aa58e49916ab (patch) | |
| tree | 814fc1d91d24de69c002e96a33982337ebbd5e83 | |
| parent | 284e7b3d6c5a285fc826aa4c51b5ae0f03282c5c (diff) | |
| download | bcm5719-llvm-e4c16c7ce354e260775f8dbf62f1aa58e49916ab.tar.gz bcm5719-llvm-e4c16c7ce354e260775f8dbf62f1aa58e49916ab.zip | |
clang-format: Several improvements around formatting braced lists.
In particular:
* If the difference between the longest and shortest element, we copped
out of column format completely. Now, we instead allow to arrange
these in a single column, essentially enforcing a one-per-line format.
* Allow column layout even if there are braced lists. Especially, if
there are many short lists, this can be beneficial. The bad case,
where there is a long nested init list is usually caught as we now
limit the length difference of the longest and shortest element.
llvm-svn: 236851
| -rw-r--r-- | clang/lib/Format/FormatToken.cpp | 7 | ||||
| -rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 36 |
2 files changed, 33 insertions, 10 deletions
diff --git a/clang/lib/Format/FormatToken.cpp b/clang/lib/Format/FormatToken.cpp index 0addbfed0ce..cc1ef55fa4f 100644 --- a/clang/lib/Format/FormatToken.cpp +++ b/clang/lib/Format/FormatToken.cpp @@ -199,13 +199,14 @@ void CommaSeparatedList::precomputeFormattingInfos(const FormatToken *Token) { // create a column layout. If it has a nested list, column layout ensures one // list element per line. If the difference between the shortest and longest // element is too large, column layout would create too much whitespace. - if (HasNestedBracedList || Commas.size() < 5 || Token->NestingLevel != 0 || - MaxItemLength - MinItemLength > 10) + if (Commas.size() < 5 || Token->NestingLevel != 0) return; // We can never place more than ColumnLimit / 3 items in a row (because of the // spaces and the comma). - for (unsigned Columns = 1; Columns <= Style.ColumnLimit / 3; ++Columns) { + unsigned MaxColumns = + MaxItemLength - MinItemLength > 10 ? 1 : Style.ColumnLimit / 3; + for (unsigned Columns = 1; Columns <= MaxColumns; ++Columns) { ColumnFormat Format; Format.Columns = Columns; Format.ColumnSizes.resize(Columns); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 0995bb162a0..9d29a268485 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -6223,9 +6223,18 @@ TEST_F(FormatTest, LayoutCxx11BraceInitializers) { ExtraSpaces); verifyFormat( "std::vector<MyValues> aaaaaaaaaaaaaaaaaaa{\n" - " aaaaaaa, aaaaaaaaaa, aaaaa, aaaaaaaaaaaaaaa, aaa, aaaaaaaaaa, a,\n" - " aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaa,\n" - " aaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaa, aaaaaaa, a};"); + " aaaaaaa,\n" + " aaaaaaaaaa,\n" + " aaaaa,\n" + " aaaaaaaaaaaaaaa,\n" + " aaa,\n" + " aaaaaaaaaa,\n" + " a,\n" + " aaaaaaaaaaaaaaaaaaaaa,\n" + " aaaaaaaaaaaa,\n" + " aaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaa,\n" + " aaaaaaa,\n" + " a};"); verifyFormat("vector<int> foo = { ::SomeGlobalFunction() };", ExtraSpaces); } @@ -6263,6 +6272,19 @@ TEST_F(FormatTest, FormatsBracedListsInColumnLayout) { verifyFormat("vector<int> aaaaaaaaaaaaaaaaaaaaaa = {\n" " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};", getLLVMStyleWithColumns(43)); + verifyFormat( + "static unsigned SomeValues[10][3] = {\n" + " {1, 4, 0}, {4, 9, 0}, {4, 5, 9}, {8, 5, 4}, {1, 8, 4},\n" + " {10, 1, 6}, {11, 0, 9}, {2, 11, 9}, {5, 2, 9}, {11, 2, 7}};"); + verifyFormat("static auto fields = new vector<string>{\n" + " \"aaaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaaaaaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaa\",\n" + " \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n" + "};"); // Trailing commas. verifyFormat("vector<int> x = {\n" @@ -6277,15 +6299,15 @@ TEST_F(FormatTest, FormatsBracedListsInColumnLayout) { " 1, 1, 1, 1,\n" " /**/ /**/};", getLLVMStyleWithColumns(39)); + + // With nested lists, we should either format one item per line or all nested + // lists one on line. + // FIXME: For some nested lists, we can do better. verifyFormat("return {{aaaaaaaaaaaaaaaaaaaaa},\n" " {aaaaaaaaaaaaaaaaaaa},\n" " {aaaaaaaaaaaaaaaaaaaaa},\n" " {aaaaaaaaaaaaaaaaa}};", getLLVMStyleWithColumns(60)); - - // With nested lists, we should either format one item per line or all nested - // lists one one line. - // FIXME: For some nested lists, we can do better. verifyFormat( "SomeStruct my_struct_array = {\n" " {aaaaaa, aaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaa, aaaaaaaaaa,\n" |

