From: Manuel Klimek Date: Fri, 11 Jan 2013 19:17:44 +0000 (+0000) Subject: Fix single-line optimization for ObjC. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5688cf3e314819ca196053ac245c19a7c321332;p=clang Fix single-line optimization for ObjC. Puts blocks always into multiple lines when they start with an ObjC keyword or minus. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172238 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index df5b4cbb9f..cee587bf32 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1338,10 +1338,12 @@ private: // brace. FormatToken *Last = &Combined.RootToken; bool AllowedTokens = - !Last->Tok.is(tok::kw_if) && !Last->Tok.is(tok::kw_while) && - !Last->Tok.is(tok::kw_do) && !Last->Tok.is(tok::r_brace) && - !Last->Tok.is(tok::kw_else) && !Last->Tok.is(tok::kw_try) && - !Last->Tok.is(tok::kw_catch) && !Last->Tok.is(tok::kw_for); + Last->Tok.isNot(tok::kw_if) && Last->Tok.isNot(tok::kw_while) && + Last->Tok.isNot(tok::kw_do) && Last->Tok.isNot(tok::r_brace) && + Last->Tok.isNot(tok::kw_else) && Last->Tok.isNot(tok::kw_try) && + Last->Tok.isNot(tok::kw_catch) && Last->Tok.isNot(tok::kw_for) && + // This gets rid of all ObjC @ keywords and - based definitions. + Last->Tok.isNot(tok::at) && Last->Tok.isNot(tok::minus); while (!Last->Children.empty()) Last = &Last->Children.back(); if (!Last->Tok.is(tok::l_brace)) diff --git a/test/Index/comment-objc-decls.m b/test/Index/comment-objc-decls.m index 58e65e4ca5..ae3b0bbf41 100644 --- a/test/Index/comment-objc-decls.m +++ b/test/Index/comment-objc-decls.m @@ -45,7 +45,7 @@ id IvarNSObject; } @end -// CHECK: Declaration>@interface NSObject { id IvarNSObject; }\n@end +// CHECK: Declaration>@interface NSObject {\n id IvarNSObject;\n}\n@end // CHECK: id IvarNSObject /** @@ -73,7 +73,7 @@ */ @property (copy) id PropertyMyClass; @end -// CHECK: @interface MyClass : NSObject <MyProto> { id IvarMyClass; }\n@end +// CHECK: @interface MyClass : NSObject <MyProto> {\n id IvarMyClass;\n}\n@end // CHECK: id IvarMyClass // CHECK: - (id)MethodMyClass; // CHECK: + (id)ClassMethodMyClass; @@ -90,7 +90,7 @@ id IvarMyClassExtension; } @end -// CHECK: @interface MyClass () { id IvarMyClassExtension; }\n@end +// CHECK: @interface MyClass () {\n id IvarMyClassExtension;\n}\n@end // CHECK: id IvarMyClassExtension diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 6beee3186b..a2f150d186 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -405,9 +405,15 @@ TEST_F(FormatTest, FormatTryCatch) { } TEST_F(FormatTest, FormatObjCTryCatch) { - verifyFormat("@try { f(); }\n" - "@catch (NSException e) { @throw; }\n" - "@finally { exit(42); }"); + verifyFormat("@try {\n" + " f();\n" + "}\n" + "@catch (NSException e) {\n" + " @throw;\n" + "}\n" + "@finally {\n" + " exit(42);\n" + "}"); } TEST_F(FormatTest, StaticInitializers) { @@ -1305,27 +1311,39 @@ TEST_F(FormatTest, FormatObjCInterface) { "+(id) init;\n" "@end"); - verifyFormat("@interface Foo { int _i; }\n" + verifyFormat("@interface Foo {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo : Bar { int _i; }\n" + verifyFormat("@interface Foo : Bar {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo : Bar { int _i; }\n" + verifyFormat("@interface Foo : Bar {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo (HackStuff) { int _i; }\n" + verifyFormat("@interface Foo (HackStuff) {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo () { int _i; }\n" + verifyFormat("@interface Foo () {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); - verifyFormat("@interface Foo (HackStuff) { int _i; }\n" + verifyFormat("@interface Foo (HackStuff) {\n" + " int _i;\n" + "}\n" "+ (id)init;\n" "@end"); } @@ -1363,7 +1381,9 @@ TEST_F(FormatTest, FormatObjCImplementation) { " return nil;\n" "}\n" "// Look, a comment!\n" - "- (int)answerWith:(int)i { return i; }\n" + "- (int)answerWith:(int)i {\n" + " return i;\n" + "}\n" "@end"); verifyFormat("@implementation Foo\n" @@ -1375,11 +1395,15 @@ TEST_F(FormatTest, FormatObjCImplementation) { "+ (id)init {}\n" "@end"); - verifyFormat("@implementation Foo { int _i; }\n" + verifyFormat("@implementation Foo {\n" + " int _i;\n" + "}\n" "+ (id)init {}\n" "@end"); - verifyFormat("@implementation Foo : Bar { int _i; }\n" + verifyFormat("@implementation Foo : Bar {\n" + " int _i;\n" + "}\n" "+ (id)init {}\n" "@end"); @@ -1469,14 +1493,18 @@ TEST_F(FormatTest, ObjCAt) { TEST_F(FormatTest, ObjCSnippets) { // FIXME: Make the uncommented lines below pass. - verifyFormat("@autoreleasepool { foo(); }"); + verifyFormat("@autoreleasepool {\n" + " foo();\n" + "}"); verifyFormat("@class Foo, Bar;"); verifyFormat("@compatibility_alias AliasName ExistingClass;"); verifyFormat("@dynamic textColor;"); //verifyFormat("char *buf1 = @encode(int **);"); verifyFormat("Protocol *proto = @protocol(p1);"); //verifyFormat("SEL s = @selector(foo:);"); - verifyFormat("@synchronized(self) { f(); }"); + verifyFormat("@synchronized(self) {\n" + " f();\n" + "}"); verifyFormat("@synthesize dropArrowPosition = dropArrowPosition_;"); verifyGoogleFormat("@synthesize dropArrowPosition = dropArrowPosition_;");