Index: clang-tools-extra/trunk/clang-tidy/objc/PropertyDeclarationCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/objc/PropertyDeclarationCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/objc/PropertyDeclarationCheck.cpp @@ -29,104 +29,12 @@ // For CategoryProperty especially in categories of system class, // to avoid naming conflict, the suggested naming style is // 'abc_lowerCamelCase' (adding lowercase prefix followed by '_'). +// Regardless of the style, all acronyms and initialisms should be capitalized. enum NamingStyle { StandardProperty = 1, CategoryProperty = 2, }; -/// The acronyms are aggregated from multiple sources including -/// https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/APIAbbreviations.html#//apple_ref/doc/uid/20001285-BCIHCGAE -/// -/// Keep this list sorted. -constexpr llvm::StringLiteral DefaultSpecialAcronyms[] = { - "[2-9]G", - "ACL", - "API", - "APN", - "APNS", - "AR", - "ARGB", - "ASCII", - "AV", - "BGRA", - "CA", - "CDN", - "CF", - "CG", - "CI", - "CRC", - "CV", - "CMYK", - "DNS", - "FPS", - "FTP", - "GIF", - "GL", - "GPS", - "GUID", - "HD", - "HDR", - "HMAC", - "HTML", - "HTTP", - "HTTPS", - "HUD", - "ID", - "JPG", - "JS", - "JSON", - "LAN", - "LZW", - "LTR", - "MAC", - "MD", - "MDNS", - "MIDI", - "NS", - "OS", - "P2P", - "PDF", - "PIN", - "PNG", - "POI", - "PSTN", - "PTR", - "QA", - "QOS", - "RGB", - "RGBA", - "RGBX", - "RIPEMD", - "ROM", - "RPC", - "RTF", - "RTL", - "SC", - "SDK", - "SHA", - "SQL", - "SSO", - "TCP", - "TIFF", - "TOS", - "TTS", - "UI", - "URI", - "URL", - "UUID", - "VC", - "VO", - "VOIP", - "VPN", - "VR", - "W", - "WAN", - "X", - "XML", - "Y", - "Z", -}; - /// For now we will only fix 'CamelCase' or 'abc_CamelCase' property to /// 'camelCase' or 'abc_camelCase'. For other cases the users need to /// come up with a proper name by their own. @@ -150,26 +58,26 @@ return FixItHint(); } -std::string AcronymsGroupRegex(llvm::ArrayRef EscapedAcronyms) { - return "(" + - llvm::join(EscapedAcronyms.begin(), EscapedAcronyms.end(), "s?|") + - "s?)"; -} - -std::string validPropertyNameRegex(llvm::ArrayRef EscapedAcronyms, - bool UsedInMatcher) { +std::string validPropertyNameRegex(bool UsedInMatcher) { // Allow any of these names: // foo // fooBar // url // urlString + // ID + // IDs // URL // URLString // bundleID + // CIColor + // + // Disallow names of this form: + // LongString + // + // aRbITRaRyCapS is allowed to avoid generating false positives for names + // like isVitaminBSupplement, CProgrammingLanguage, and isBeforeM. std::string StartMatcher = UsedInMatcher ? "::" : "^"; - std::string AcronymsMatcher = AcronymsGroupRegex(EscapedAcronyms); - return StartMatcher + "(" + AcronymsMatcher + "[A-Z]?)?[a-z]+[a-z0-9]*(" + - AcronymsMatcher + "|([A-Z][a-z0-9]+)|A|I)*$"; + return StartMatcher + "([a-z]|[A-Z][A-Z0-9])[a-z0-9A-Z]*$"; } bool hasCategoryPropertyPrefix(llvm::StringRef PropertyName) { @@ -177,8 +85,7 @@ return RegexExp.match(PropertyName); } -bool prefixedPropertyNameValid(llvm::StringRef PropertyName, - llvm::ArrayRef Acronyms) { +bool prefixedPropertyNameValid(llvm::StringRef PropertyName) { size_t Start = PropertyName.find_first_of('_'); assert(Start != llvm::StringRef::npos && Start + 1 < PropertyName.size()); auto Prefix = PropertyName.substr(0, Start); @@ -186,7 +93,7 @@ return false; } auto RegexExp = - llvm::Regex(llvm::StringRef(validPropertyNameRegex(Acronyms, false))); + llvm::Regex(llvm::StringRef(validPropertyNameRegex(false))); return RegexExp.match(PropertyName.substr(Start + 1)); } } // namespace @@ -203,26 +110,11 @@ // this check should only be applied to ObjC sources. if (!getLangOpts().ObjC) return; - if (IncludeDefaultAcronyms) { - EscapedAcronyms.reserve(llvm::array_lengthof(DefaultSpecialAcronyms) + - SpecialAcronyms.size()); - // No need to regex-escape the default acronyms. - EscapedAcronyms.insert(EscapedAcronyms.end(), - std::begin(DefaultSpecialAcronyms), - std::end(DefaultSpecialAcronyms)); - } else { - EscapedAcronyms.reserve(SpecialAcronyms.size()); - } - // In case someone defines a prefix which includes a regex - // special character, regex-escape all the user-defined prefixes. - std::transform(SpecialAcronyms.begin(), SpecialAcronyms.end(), - std::back_inserter(EscapedAcronyms), - [](const std::string &s) { return llvm::Regex::escape(s); }); Finder->addMatcher( objcPropertyDecl( // the property name should be in Lower Camel Case like // 'lowerCamelCase' - unless(matchesName(validPropertyNameRegex(EscapedAcronyms, true)))) + unless(matchesName(validPropertyNameRegex(true)))) .bind("property"), this); } @@ -234,14 +126,9 @@ auto *DeclContext = MatchedDecl->getDeclContext(); auto *CategoryDecl = llvm::dyn_cast(DeclContext); - auto SingleAcronymRegex = - llvm::Regex("^([a-zA-Z]+_)?" + AcronymsGroupRegex(EscapedAcronyms) + "$"); - if (SingleAcronymRegex.match(MatchedDecl->getName())) { - return; - } if (CategoryDecl != nullptr && hasCategoryPropertyPrefix(MatchedDecl->getName())) { - if (!prefixedPropertyNameValid(MatchedDecl->getName(), EscapedAcronyms) || + if (!prefixedPropertyNameValid(MatchedDecl->getName()) || CategoryDecl->IsClassExtension()) { NamingStyle Style = CategoryDecl->IsClassExtension() ? StandardProperty : CategoryProperty; Index: clang-tools-extra/trunk/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/trunk/docs/ReleaseNotes.rst +++ clang-tools-extra/trunk/docs/ReleaseNotes.rst @@ -231,6 +231,10 @@ - floating point - integer narrowing conversions, - constants with narrowing conversions (even in ternary operator). +- The :doc:`objc-property-declaration + ` check now ignores the + `Acronyms` and `IncludeDefaultAcronyms` options. + Improvements to include-fixer ----------------------------- Index: clang-tools-extra/trunk/docs/clang-tidy/checks/objc-property-declaration.rst =================================================================== --- clang-tools-extra/trunk/docs/clang-tidy/checks/objc-property-declaration.rst +++ clang-tools-extra/trunk/docs/clang-tidy/checks/objc-property-declaration.rst @@ -47,23 +47,8 @@ .. option:: Acronyms - Semicolon-separated list of custom acronyms that can be used as a prefix - or a suffix of property names. - - By default, appends to the list of default acronyms ( - ``IncludeDefaultAcronyms`` set to ``1``). - If ``IncludeDefaultAcronyms`` is set to ``0``, instead replaces the - default list of acronyms. + This option is deprecated and ignored. .. option:: IncludeDefaultAcronyms - Integer value (defaults to ``1``) to control whether the default - acronyms are included in the list of acronyms. - - If set to ``1``, the value in ``Acronyms`` is appended to the - default list of acronyms: - - ``[2-9]G;ACL;API;APN;APNS;AR;ARGB;ASCII;AV;BGRA;CA;CDN;CF;CG;CI;CRC;CV;CMYK;DNS;FPS;FTP;GIF;GL;GPS;GUID;HD;HDR;HMAC;HTML;HTTP;HTTPS;HUD;ID;JPG;JS;JSON;LAN;LZW;LTR;MAC;MD;MDNS;MIDI;NS;OS;P2P;PDF;PIN;PNG;POI;PSTN;PTR;QA;QOS;RGB;RGBA;RGBX;RIPEMD;ROM;RPC;RTF;RTL;SC;SDK;SHA;SQL;SSO;TCP;TIFF;TOS;TTS;UI;URI;URL;UUID;VC;VO;VOIP;VPN;VR;W;WAN;X;XML;Y;Z``. - - If set to ``0``, the value in ``Acronyms`` replaces the default list - of acronyms. + This option is deprecated and ignored. Index: clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-additional.m =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-additional.m +++ clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-additional.m @@ -1,15 +0,0 @@ -// RUN: %check_clang_tidy %s objc-property-declaration %t \ -// RUN: -config='{CheckOptions: \ -// RUN: [{key: objc-property-declaration.Acronyms, value: "ABC;TGIF"}]}' \ -// RUN: -- -@class NSString; - -@interface Foo -@property(assign, nonatomic) int AbcNotRealPrefix; -// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: property name 'AbcNotRealPrefix' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] -// CHECK-FIXES: @property(assign, nonatomic) int abcNotRealPrefix; -@property(assign, nonatomic) int ABCCustomPrefix; -@property(strong, nonatomic) NSString *ABC_custom_prefix; -// CHECK-MESSAGES: :[[@LINE-1]]:40: warning: property name 'ABC_custom_prefix' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] -@property(assign, nonatomic) int GIFShouldIncludeStandardAcronym; -@end Index: clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-custom.m =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-custom.m +++ clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration-custom.m @@ -1,18 +0,0 @@ -// RUN: %check_clang_tidy %s objc-property-declaration %t \ -// RUN: -config='{CheckOptions: \ -// RUN: [{key: objc-property-declaration.Acronyms, value: "ABC;TGIF"}, \ -// RUN: {key: objc-property-declaration.IncludeDefaultAcronyms, value: 0}]}' \ -// RUN: -- -@class NSString; - -@interface Foo -@property(assign, nonatomic) int AbcNotRealPrefix; -// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: property name 'AbcNotRealPrefix' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] -// CHECK-FIXES: @property(assign, nonatomic) int abcNotRealPrefix; -@property(assign, nonatomic) int ABCCustomPrefix; -@property(strong, nonatomic) NSString *ABC_custom_prefix; -// CHECK-MESSAGES: :[[@LINE-1]]:40: warning: property name 'ABC_custom_prefix' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] -@property(assign, nonatomic) int GIFIgnoreStandardAcronym; -// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: property name 'GIFIgnoreStandardAcronym' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] -@property(strong, nonatomic) NSString *TGIF; -@end Index: clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration.m =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration.m +++ clang-tools-extra/trunk/test/clang-tidy/objc-property-declaration.m @@ -1,8 +1,12 @@ // RUN: %check_clang_tidy %s objc-property-declaration %t +@class CIColor; +@class NSArray; @class NSData; @class NSString; @class UIViewController; +typedef void *CGColorRef; + @interface Foo @property(assign, nonatomic) int NotCamelCase; // CHECK-MESSAGES: :[[@LINE-1]]:34: warning: property name 'NotCamelCase' not using lowerCamelCase style or not prefixed in a category, according to the Apple Coding Guidelines [objc-property-declaration] @@ -23,6 +27,9 @@ @property(assign, nonatomic) int enableGLAcceleration; @property(assign, nonatomic) int ID; @property(assign, nonatomic) int hasADog; +@property(nonatomic, readonly) CGColorRef CGColor; +@property(nonatomic, readonly) CIColor *CIColor; +@property(nonatomic, copy) NSArray *IDs; @end @interface Foo (Bar)