diff options
| author | Jacek Olesiak <jolesiak@google.com> | 2018-02-15 08:47:56 +0000 |
|---|---|---|
| committer | Jacek Olesiak <jolesiak@google.com> | 2018-02-15 08:47:56 +0000 |
| commit | ce4f0af3023fb3e023030d83998e3055545f13d0 (patch) | |
| tree | d27adb505f746f3296793e0a43d8dbb0f2089200 | |
| parent | 7929d006d732185eee759aa84bb10d4150373b9f (diff) | |
| download | bcm5719-llvm-ce4f0af3023fb3e023030d83998e3055545f13d0.tar.gz bcm5719-llvm-ce4f0af3023fb3e023030d83998e3055545f13d0.zip | |
[clang-format] Improve ObjC headers detection
Summary: Detect ObjC characteristic types when they start a line and add additional keywords.
Reviewers: benhamilton
Reviewed By: benhamilton
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D43124
llvm-svn: 325221
| -rw-r--r-- | clang/lib/Format/Format.cpp | 9 | ||||
| -rw-r--r-- | clang/unittests/Format/FormatTestObjC.cpp | 25 |
2 files changed, 24 insertions, 10 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index ff437f119e9..af03696cf89 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1440,7 +1440,9 @@ private: "NSAffineTransform", "NSArray", "NSAttributedString", + "NSBundle", "NSCache", + "NSCalendar", "NSCharacterSet", "NSCountedSet", "NSData", @@ -1466,6 +1468,7 @@ private: "NSMutableString", "NSNumber", "NSNumberFormatter", + "NSObject", "NSOrderedSet", "NSPoint", "NSPointerArray", @@ -1475,17 +1478,19 @@ private: "NSSet", "NSSize", "NSString", + "NSTimeZone", "NSUInteger", "NSURL", "NSURLComponents", "NSURLQueryItem", "NSUUID", + "NSValue", }; for (auto &Line : AnnotatedLines) { - for (FormatToken *FormatTok = Line->First->Next; FormatTok; + for (FormatToken *FormatTok = Line->First; FormatTok; FormatTok = FormatTok->Next) { - if ((FormatTok->Previous->is(tok::at) && + if ((FormatTok->Previous && FormatTok->Previous->is(tok::at) && (FormatTok->isObjCAtKeyword(tok::objc_interface) || FormatTok->isObjCAtKeyword(tok::objc_implementation) || FormatTok->isObjCAtKeyword(tok::objc_protocol) || diff --git a/clang/unittests/Format/FormatTestObjC.cpp b/clang/unittests/Format/FormatTestObjC.cpp index a2cfb27eaff..40dc375d576 100644 --- a/clang/unittests/Format/FormatTestObjC.cpp +++ b/clang/unittests/Format/FormatTestObjC.cpp @@ -113,10 +113,6 @@ TEST(FormatTestObjCStyle, DetectsObjCInHeaders) { ASSERT_TRUE((bool)Style); EXPECT_EQ(FormatStyle::LK_Cpp, Style->Language); - Style = getStyle("{}", "a.h", "none", "extern NSString *kFoo;\n"); - ASSERT_TRUE((bool)Style); - EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); - Style = getStyle("{}", "a.h", "none", "typedef NS_ENUM(NSInteger, Foo) {};\n"); ASSERT_TRUE((bool)Style); @@ -126,10 +122,6 @@ TEST(FormatTestObjCStyle, DetectsObjCInHeaders) { ASSERT_TRUE((bool)Style); EXPECT_EQ(FormatStyle::LK_Cpp, Style->Language); - Style = getStyle("{}", "a.h", "none", "extern NSInteger Foo();\n"); - ASSERT_TRUE((bool)Style); - EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); - Style = getStyle("{}", "a.h", "none", "inline void Foo() { Log(@\"Foo\"); }\n"); ASSERT_TRUE((bool)Style); @@ -154,6 +146,23 @@ TEST(FormatTestObjCStyle, DetectsObjCInHeaders) { "inline void Foo() { int foo[] = {1, 2, 3}; }\n"); ASSERT_TRUE((bool)Style); EXPECT_EQ(FormatStyle::LK_Cpp, Style->Language); + + // ObjC characteristic types. + Style = getStyle("{}", "a.h", "none", "extern NSString *kFoo;\n"); + ASSERT_TRUE((bool)Style); + EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); + + Style = getStyle("{}", "a.h", "none", "extern NSInteger Foo();\n"); + ASSERT_TRUE((bool)Style); + EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); + + Style = getStyle("{}", "a.h", "none", "NSObject *Foo();\n"); + ASSERT_TRUE((bool)Style); + EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); + + Style = getStyle("{}", "a.h", "none", "NSSet *Foo();\n"); + ASSERT_TRUE((bool)Style); + EXPECT_EQ(FormatStyle::LK_ObjC, Style->Language); } TEST_F(FormatTestObjC, FormatObjCTryCatch) { |

