r182082 - Slightly modify the formatting rules for braced lists.
Daniel Jasper
djasper at google.com
Fri May 17 02:35:01 PDT 2013
Author: djasper
Date: Fri May 17 04:35:01 2013
New Revision: 182082
URL: http://llvm.org/viewvc/llvm-project?rev=182082&view=rev
Log:
Slightly modify the formatting rules for braced lists.
Basically, the new rule is: The opening "{" always has to be on the
same line as the first element if the braced list is nested
(e.g. in another braced list or in a function).
The solution that clang-format produces almost always adheres to this
rule anyway and this makes clang-format significantly faster for larger
lists. Added a test cases for the only exception I could find
(which doesn't seem to be very important at first sight).
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=182082&r1=182081&r2=182082&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Fri May 17 04:35:01 2013
@@ -977,10 +977,18 @@ private:
/// \brief Returns \c true, if a line break after \p State is allowed.
bool canBreak(const LineState &State) {
- if (!State.NextToken->CanBreakBefore &&
- !(State.NextToken->is(tok::r_brace) &&
+ const AnnotatedToken &Current = *State.NextToken;
+ const AnnotatedToken &Previous = *Current.Parent;
+ if (!Current.CanBreakBefore &&
+ !(Current.is(tok::r_brace) &&
State.Stack.back().BreakBeforeClosingBrace))
return false;
+ // The opening "{" of a braced list has to be on the same line as the first
+ // element if it is nested in another braced init list or function call.
+ if (!Current.MustBreakBefore && Previous.is(tok::l_brace) &&
+ Previous.Parent &&
+ Previous.Parent->isOneOf(tok::l_brace, tok::l_paren, tok::comma))
+ return false;
return !State.Stack.back().NoLineBreak;
}
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=182082&r1=182081&r2=182082&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Fri May 17 04:35:01 2013
@@ -1192,6 +1192,18 @@ TEST_F(FormatTest, StaticInitializers) {
"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"
+ "};");
+
+ // FIXME: This would fit into the column limit if we'd fit "{ {" on the first
+ // line. However, the formatting looks a bit off and this probably doesn't
+ // happen often in practice.
+ verifyFormat("static int Variable[1] = {\n"
+ " { 1000000000000000000000000000000000000 }\n"
+ "};",
+ getLLVMStyleWithColumns(40));
}
TEST_F(FormatTest, NestedStaticInitializers) {
More information about the cfe-commits
mailing list