forked from OSchip/llvm-project
Fix single-line optimization for ObjC.
Puts blocks always into multiple lines when they start with an ObjC keyword or minus. llvm-svn: 172238
This commit is contained in:
parent
aec10c6d44
commit
2acb7b7bb1
|
@ -1338,10 +1338,12 @@ private:
|
||||||
// brace.
|
// brace.
|
||||||
FormatToken *Last = &Combined.RootToken;
|
FormatToken *Last = &Combined.RootToken;
|
||||||
bool AllowedTokens =
|
bool AllowedTokens =
|
||||||
!Last->Tok.is(tok::kw_if) && !Last->Tok.is(tok::kw_while) &&
|
Last->Tok.isNot(tok::kw_if) && Last->Tok.isNot(tok::kw_while) &&
|
||||||
!Last->Tok.is(tok::kw_do) && !Last->Tok.is(tok::r_brace) &&
|
Last->Tok.isNot(tok::kw_do) && Last->Tok.isNot(tok::r_brace) &&
|
||||||
!Last->Tok.is(tok::kw_else) && !Last->Tok.is(tok::kw_try) &&
|
Last->Tok.isNot(tok::kw_else) && Last->Tok.isNot(tok::kw_try) &&
|
||||||
!Last->Tok.is(tok::kw_catch) && !Last->Tok.is(tok::kw_for);
|
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())
|
while (!Last->Children.empty())
|
||||||
Last = &Last->Children.back();
|
Last = &Last->Children.back();
|
||||||
if (!Last->Tok.is(tok::l_brace))
|
if (!Last->Tok.is(tok::l_brace))
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
id IvarNSObject;
|
id IvarNSObject;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
// CHECK: Declaration>@interface NSObject { id IvarNSObject; }\n@end</Declaration>
|
// CHECK: Declaration>@interface NSObject {\n id IvarNSObject;\n}\n@end</Declaration>
|
||||||
// CHECK: <Declaration>id IvarNSObject</Declaration>
|
// CHECK: <Declaration>id IvarNSObject</Declaration>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
*/
|
*/
|
||||||
@property (copy) id PropertyMyClass;
|
@property (copy) id PropertyMyClass;
|
||||||
@end
|
@end
|
||||||
// CHECK: <Declaration>@interface MyClass : NSObject <MyProto> { id IvarMyClass; }\n@end</Declaration>
|
// CHECK: <Declaration>@interface MyClass : NSObject <MyProto> {\n id IvarMyClass;\n}\n@end</Declaration>
|
||||||
// CHECK: <Declaration>id IvarMyClass</Declaration>
|
// CHECK: <Declaration>id IvarMyClass</Declaration>
|
||||||
// CHECK: <Declaration>- (id)MethodMyClass;</Declaration>
|
// CHECK: <Declaration>- (id)MethodMyClass;</Declaration>
|
||||||
// CHECK: <Declaration>+ (id)ClassMethodMyClass;</Declaration>
|
// CHECK: <Declaration>+ (id)ClassMethodMyClass;</Declaration>
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
id IvarMyClassExtension;
|
id IvarMyClassExtension;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
// CHECK: <Declaration>@interface MyClass () { id IvarMyClassExtension; }\n@end</Declaration>
|
// CHECK: <Declaration>@interface MyClass () {\n id IvarMyClassExtension;\n}\n@end</Declaration>
|
||||||
// CHECK: <Declaration>id IvarMyClassExtension</Declaration>
|
// CHECK: <Declaration>id IvarMyClassExtension</Declaration>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -405,9 +405,15 @@ TEST_F(FormatTest, FormatTryCatch) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FormatTest, FormatObjCTryCatch) {
|
TEST_F(FormatTest, FormatObjCTryCatch) {
|
||||||
verifyFormat("@try { f(); }\n"
|
verifyFormat("@try {\n"
|
||||||
"@catch (NSException e) { @throw; }\n"
|
" f();\n"
|
||||||
"@finally { exit(42); }");
|
"}\n"
|
||||||
|
"@catch (NSException e) {\n"
|
||||||
|
" @throw;\n"
|
||||||
|
"}\n"
|
||||||
|
"@finally {\n"
|
||||||
|
" exit(42);\n"
|
||||||
|
"}");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FormatTest, StaticInitializers) {
|
TEST_F(FormatTest, StaticInitializers) {
|
||||||
|
@ -1305,27 +1311,39 @@ TEST_F(FormatTest, FormatObjCInterface) {
|
||||||
"+(id) init;\n"
|
"+(id) init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo { int _i; }\n"
|
verifyFormat("@interface Foo {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo : Bar { int _i; }\n"
|
verifyFormat("@interface Foo : Bar {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo : Bar <Baz, Quux> { int _i; }\n"
|
verifyFormat("@interface Foo : Bar <Baz, Quux> {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo (HackStuff) { int _i; }\n"
|
verifyFormat("@interface Foo (HackStuff) {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo () { int _i; }\n"
|
verifyFormat("@interface Foo () {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@interface Foo (HackStuff) <MyProtocol> { int _i; }\n"
|
verifyFormat("@interface Foo (HackStuff) <MyProtocol> {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init;\n"
|
"+ (id)init;\n"
|
||||||
"@end");
|
"@end");
|
||||||
}
|
}
|
||||||
|
@ -1363,7 +1381,9 @@ TEST_F(FormatTest, FormatObjCImplementation) {
|
||||||
" return nil;\n"
|
" return nil;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"// Look, a comment!\n"
|
"// Look, a comment!\n"
|
||||||
"- (int)answerWith:(int)i { return i; }\n"
|
"- (int)answerWith:(int)i {\n"
|
||||||
|
" return i;\n"
|
||||||
|
"}\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@implementation Foo\n"
|
verifyFormat("@implementation Foo\n"
|
||||||
|
@ -1375,11 +1395,15 @@ TEST_F(FormatTest, FormatObjCImplementation) {
|
||||||
"+ (id)init {}\n"
|
"+ (id)init {}\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@implementation Foo { int _i; }\n"
|
verifyFormat("@implementation Foo {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init {}\n"
|
"+ (id)init {}\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
verifyFormat("@implementation Foo : Bar { int _i; }\n"
|
verifyFormat("@implementation Foo : Bar {\n"
|
||||||
|
" int _i;\n"
|
||||||
|
"}\n"
|
||||||
"+ (id)init {}\n"
|
"+ (id)init {}\n"
|
||||||
"@end");
|
"@end");
|
||||||
|
|
||||||
|
@ -1469,14 +1493,18 @@ TEST_F(FormatTest, ObjCAt) {
|
||||||
|
|
||||||
TEST_F(FormatTest, ObjCSnippets) {
|
TEST_F(FormatTest, ObjCSnippets) {
|
||||||
// FIXME: Make the uncommented lines below pass.
|
// FIXME: Make the uncommented lines below pass.
|
||||||
verifyFormat("@autoreleasepool { foo(); }");
|
verifyFormat("@autoreleasepool {\n"
|
||||||
|
" foo();\n"
|
||||||
|
"}");
|
||||||
verifyFormat("@class Foo, Bar;");
|
verifyFormat("@class Foo, Bar;");
|
||||||
verifyFormat("@compatibility_alias AliasName ExistingClass;");
|
verifyFormat("@compatibility_alias AliasName ExistingClass;");
|
||||||
verifyFormat("@dynamic textColor;");
|
verifyFormat("@dynamic textColor;");
|
||||||
//verifyFormat("char *buf1 = @encode(int **);");
|
//verifyFormat("char *buf1 = @encode(int **);");
|
||||||
verifyFormat("Protocol *proto = @protocol(p1);");
|
verifyFormat("Protocol *proto = @protocol(p1);");
|
||||||
//verifyFormat("SEL s = @selector(foo:);");
|
//verifyFormat("SEL s = @selector(foo:);");
|
||||||
verifyFormat("@synchronized(self) { f(); }");
|
verifyFormat("@synchronized(self) {\n"
|
||||||
|
" f();\n"
|
||||||
|
"}");
|
||||||
|
|
||||||
verifyFormat("@synthesize dropArrowPosition = dropArrowPosition_;");
|
verifyFormat("@synthesize dropArrowPosition = dropArrowPosition_;");
|
||||||
verifyGoogleFormat("@synthesize dropArrowPosition = dropArrowPosition_;");
|
verifyGoogleFormat("@synthesize dropArrowPosition = dropArrowPosition_;");
|
||||||
|
|
Loading…
Reference in New Issue