r175147 - Align superclasses for multiple inheritence.
Daniel Jasper
djasper at google.com
Thu Feb 14 00:42:55 PST 2013
Author: djasper
Date: Thu Feb 14 02:42:54 2013
New Revision: 175147
URL: http://llvm.org/viewvc/llvm-project?rev=175147&view=rev
Log:
Align superclasses for multiple inheritence.
This fixes llvm.org/PR15179.
Before:
class ColorChooserMac : public content::ColorChooser,
public content::WebContentsObserver {
};
After:
class ColorChooserMac : public content::ColorChooser,
public content::WebContentsObserver {
};
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/lib/Format/TokenAnnotator.cpp
cfe/trunk/lib/Format/TokenAnnotator.h
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=175147&r1=175146&r2=175147&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Thu Feb 14 02:42:54 2013
@@ -524,6 +524,8 @@ private:
Previous.Type == TT_CtorInitializerColon) &&
getPrecedence(Previous) != prec::Assignment)
State.Stack.back().LastSpace = State.Column;
+ else if (Previous.Type == TT_InheritanceColon)
+ State.Stack.back().Indent = State.Column;
else if (Previous.ParameterCount > 1 &&
(Previous.is(tok::l_paren) || Previous.is(tok::l_square) ||
Previous.is(tok::l_brace) ||
@@ -564,6 +566,8 @@ private:
const AnnotatedToken &Current = *State.NextToken;
assert(State.Stack.size());
+ if (Current.Type == TT_InheritanceColon)
+ State.Stack.back().AvoidBinPacking = true;
if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess == 0)
State.Stack.back().FirstLessLess = State.Column;
if (Current.is(tok::question))
Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=175147&r1=175146&r2=175147&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Thu Feb 14 02:42:54 2013
@@ -323,6 +323,8 @@ private:
Contexts.back().FirstObjCSelectorName = Tok->Parent;
} else if (Contexts.back().ColonIsForRangeExpr) {
Tok->Type = TT_RangeBasedForLoopColon;
+ } else if (Contexts.size() == 1) {
+ Tok->Type = TT_InheritanceColon;
}
break;
case tok::kw_if:
@@ -856,7 +858,8 @@ unsigned TokenAnnotator::splitPenalty(co
if (Left.is(tok::coloncolon))
return 500;
- if (Left.Type == TT_RangeBasedForLoopColon)
+ if (Left.Type == TT_RangeBasedForLoopColon ||
+ Left.Type == TT_InheritanceColon)
return 5;
if (Right.is(tok::arrow) || Right.is(tok::period)) {
@@ -1040,7 +1043,11 @@ bool TokenAnnotator::canBreakBefore(cons
return true;
if (Right.Type == TT_ConditionalExpr || Right.is(tok::question))
return true;
- if (Left.Type == TT_RangeBasedForLoopColon)
+ if (Right.Type == TT_RangeBasedForLoopColon ||
+ Right.Type == TT_InheritanceColon)
+ return false;
+ if (Left.Type == TT_RangeBasedForLoopColon ||
+ Left.Type == TT_InheritanceColon)
return true;
if (Left.Type == TT_PointerOrReference || Left.Type == TT_TemplateCloser ||
Left.Type == TT_UnaryOperator || Left.Type == TT_ConditionalExpr ||
Modified: cfe/trunk/lib/Format/TokenAnnotator.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.h?rev=175147&r1=175146&r2=175147&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.h (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.h Thu Feb 14 02:42:54 2013
@@ -34,6 +34,7 @@ enum TokenType {
TT_ConditionalExpr,
TT_CtorInitializerColon,
TT_ImplicitStringLiteral,
+ TT_InheritanceColon,
TT_LineComment,
TT_ObjCArrayLiteral,
TT_ObjCBlockLParen,
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=175147&r1=175146&r2=175147&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Feb 14 02:42:54 2013
@@ -584,6 +584,25 @@ TEST_F(FormatTest, UnderstandsAccessSpec
TEST_F(FormatTest, FormatsDerivedClass) {
verifyFormat("class A : public B {\n};");
verifyFormat("class A : public ::B {\n};");
+
+ verifyFormat(
+ "class AAAAAAAAAAAAAAAAAAAA : public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,\n"
+ " public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC {\n"
+ "};\n");
+ verifyFormat("class AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA :\n"
+ " public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,\n"
+ " public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC {\n"
+ "};\n");
+ verifyFormat(
+ "class A : public B, public C, public D, public E, public F, public G {\n"
+ "};");
+ verifyFormat("class AAAAAAAAAAAA : public B,\n"
+ " public C,\n"
+ " public D,\n"
+ " public E,\n"
+ " public F,\n"
+ " public G {\n"
+ "};");
}
TEST_F(FormatTest, FormatsVariableDeclarationsAfterStructOrClass) {
@@ -1018,6 +1037,9 @@ TEST_F(FormatTest, PreventConfusingInden
" ddd);");
}
+TEST_F(FormatTest, Inheritance) {
+}
+
TEST_F(FormatTest, ConstructorInitializers) {
verifyFormat("Constructor() : Initializer(FitsOnTheLine) {}");
verifyFormat("Constructor() : Inttializer(FitsOnTheLine) {}",
More information about the cfe-commits
mailing list