forked from OSchip/llvm-project
Formatter: Add support for @implementation.
Just reuse the @interface code for this. It accepts slightly more than necessary (@implementation cannot have protocol lists), but that's ok. llvm-svn: 172019
This commit is contained in:
parent
eb994f4064
commit
2ce0ac5a8c
|
@ -209,7 +209,8 @@ void UnwrappedLineParser::parseStructuralElement() {
|
|||
case tok::objc_private:
|
||||
return parseAccessSpecifier();
|
||||
case tok::objc_interface:
|
||||
return parseObjCInterface();
|
||||
case tok::objc_implementation:
|
||||
return parseObjCInterfaceOrImplementation();
|
||||
case tok::objc_protocol:
|
||||
return parseObjCProtocol();
|
||||
case tok::objc_end:
|
||||
|
@ -519,7 +520,7 @@ void UnwrappedLineParser::parseObjCUntilAtEnd() {
|
|||
} while (!eof());
|
||||
}
|
||||
|
||||
void UnwrappedLineParser::parseObjCInterface() {
|
||||
void UnwrappedLineParser::parseObjCInterfaceOrImplementation() {
|
||||
nextToken();
|
||||
nextToken(); // interface name
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ private:
|
|||
void parseStructOrClass();
|
||||
void parseObjCProtocolList();
|
||||
void parseObjCUntilAtEnd();
|
||||
void parseObjCInterface();
|
||||
void parseObjCInterfaceOrImplementation();
|
||||
void parseObjCProtocol();
|
||||
void addUnwrappedLine();
|
||||
bool eof() const;
|
||||
|
|
|
@ -162,7 +162,7 @@
|
|||
*/
|
||||
- (void) setPropertyMyClassCategory : (id) arg {}
|
||||
@end
|
||||
// CHECK: <Declaration>@implementation MyClass(Category) @end</Declaration>
|
||||
// CHECK: <Declaration>@implementation MyClass(Category)\n@end</Declaration>
|
||||
// CHECK: <Declaration>- (void)MethodMyClassCategory;</Declaration>
|
||||
// CHECK: <Declaration>- (id)PropertyMyClassCategory;</Declaration>
|
||||
// CHECK: <Declaration>- (void)setPropertyMyClassCategory:(id)arg;</Declaration>
|
||||
|
@ -172,4 +172,4 @@
|
|||
*/
|
||||
@implementation NSObject
|
||||
@end
|
||||
// CHECK: <Declaration>@implementation NSObject @end</Declaration>
|
||||
// CHECK: <Declaration>@implementation NSObject\n@end</Declaration>
|
||||
|
|
|
@ -1251,6 +1251,77 @@ TEST_F(FormatTest, FormatObjCInterface) {
|
|||
"@end");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, FormatObjCImplementation) {
|
||||
verifyFormat("@implementation Foo : NSObject {\n"
|
||||
"@public\n"
|
||||
" int field1;\n"
|
||||
"@protected\n"
|
||||
" int field2;\n"
|
||||
"@private\n"
|
||||
" int field3;\n"
|
||||
"@package\n"
|
||||
" int field4;\n"
|
||||
"}\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
verifyGoogleFormat("@implementation Foo : NSObject {\n"
|
||||
" @public\n"
|
||||
" int field1;\n"
|
||||
" @protected\n"
|
||||
" int field2;\n"
|
||||
" @private\n"
|
||||
" int field3;\n"
|
||||
" @package\n"
|
||||
" int field4;\n"
|
||||
"}\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
verifyFormat("@implementation Foo\n"
|
||||
"+ (id)init {\n"
|
||||
" if (true)\n"
|
||||
" return nil;\n"
|
||||
"}\n"
|
||||
"// Look, a comment!\n"
|
||||
"- (int)answerWith:(int)i {\n"
|
||||
" return i;\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
verifyFormat("@implementation Foo\n"
|
||||
"@end\n"
|
||||
"@implementation Bar\n"
|
||||
"@end");
|
||||
|
||||
verifyFormat("@implementation Foo : Bar\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
verifyFormat("@implementation Foo {\n"
|
||||
" int _i;\n"
|
||||
"}\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
verifyFormat("@implementation Foo : Bar {\n"
|
||||
" int _i;\n"
|
||||
"}\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
|
||||
// FIXME: there should be a space before '(' for categories.
|
||||
verifyFormat("@implementation Foo(HackStuff)\n"
|
||||
"+ (id)init {\n"
|
||||
"}\n"
|
||||
"@end");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, FormatObjCProtocol) {
|
||||
verifyFormat("@protocol Foo\n"
|
||||
"@property(weak) id delegate;\n"
|
||||
|
|
Loading…
Reference in New Issue