stephanemoore updated this revision to Diff 215311. stephanemoore added a comment.
Fix example matches in comment. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66270/new/ https://reviews.llvm.org/D66270 Files: clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp Index: clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp +++ clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp @@ -35,38 +35,25 @@ return Node.getMethodFamily() == OMF_init; } -/// \brief Matches Objective-C implementations of classes that directly or -/// indirectly have a superclass matching \c InterfaceDecl. +/// \brief Matches Objective-C implementations with interfaces that match +/// \c Base. /// -/// Note that a class is not considered to be a subclass of itself. -/// -/// Example matches implementation declarations for Y and Z. -/// (matcher = objcInterfaceDecl(isSubclassOf(hasName("X")))) +/// Example matches implementation declarations for X. +/// (matcher = objcImplementationDecl(hasInterface(hasName("X")))) /// \code /// @interface X /// @end -/// @interface Y : X -/// @end -/// @implementation Y // directly derived -/// @end -/// @interface Z : Y +/// @implementation X /// @end -/// @implementation Z // indirectly derived +/// @interface Y +// @end +/// @implementation Y /// @end /// \endcode -AST_MATCHER_P(ObjCImplementationDecl, isSubclassOf, - ast_matchers::internal::Matcher<ObjCInterfaceDecl>, - InterfaceDecl) { - // Check if any of the superclasses of the class match. - for (const ObjCInterfaceDecl *SuperClass = - Node.getClassInterface()->getSuperClass(); - SuperClass != nullptr; SuperClass = SuperClass->getSuperClass()) { - if (InterfaceDecl.matches(*SuperClass, Finder, Builder)) - return true; - } - - // No matches found. - return false; +AST_MATCHER_P(ObjCImplementationDecl, hasInterface, + ast_matchers::internal::Matcher<ObjCInterfaceDecl>, Base) { + const ObjCInterfaceDecl *InterfaceDecl = Node.getClassInterface(); + return Base.matches(*InterfaceDecl, Finder, Builder); } /// \brief Matches Objective-C message expressions where the receiver is the @@ -93,11 +80,11 @@ return; Finder->addMatcher( - objcMessageExpr( - hasSelector("self"), isMessagingSuperInstance(), - hasAncestor(objcMethodDecl(isInitializer(), - hasDeclContext(objcImplementationDecl( - isSubclassOf(hasName("NSObject"))))))) + objcMessageExpr(hasSelector("self"), isMessagingSuperInstance(), + hasAncestor(objcMethodDecl( + isInitializer(), + hasDeclContext(objcImplementationDecl(hasInterface( + isDerivedFrom(hasName("NSObject")))))))) .bind("message"), this); }
Index: clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp +++ clang-tools-extra/clang-tidy/objc/SuperSelfCheck.cpp @@ -35,38 +35,25 @@ return Node.getMethodFamily() == OMF_init; } -/// \brief Matches Objective-C implementations of classes that directly or -/// indirectly have a superclass matching \c InterfaceDecl. +/// \brief Matches Objective-C implementations with interfaces that match +/// \c Base. /// -/// Note that a class is not considered to be a subclass of itself. -/// -/// Example matches implementation declarations for Y and Z. -/// (matcher = objcInterfaceDecl(isSubclassOf(hasName("X")))) +/// Example matches implementation declarations for X. +/// (matcher = objcImplementationDecl(hasInterface(hasName("X")))) /// \code /// @interface X /// @end -/// @interface Y : X -/// @end -/// @implementation Y // directly derived -/// @end -/// @interface Z : Y +/// @implementation X /// @end -/// @implementation Z // indirectly derived +/// @interface Y +// @end +/// @implementation Y /// @end /// \endcode -AST_MATCHER_P(ObjCImplementationDecl, isSubclassOf, - ast_matchers::internal::Matcher<ObjCInterfaceDecl>, - InterfaceDecl) { - // Check if any of the superclasses of the class match. - for (const ObjCInterfaceDecl *SuperClass = - Node.getClassInterface()->getSuperClass(); - SuperClass != nullptr; SuperClass = SuperClass->getSuperClass()) { - if (InterfaceDecl.matches(*SuperClass, Finder, Builder)) - return true; - } - - // No matches found. - return false; +AST_MATCHER_P(ObjCImplementationDecl, hasInterface, + ast_matchers::internal::Matcher<ObjCInterfaceDecl>, Base) { + const ObjCInterfaceDecl *InterfaceDecl = Node.getClassInterface(); + return Base.matches(*InterfaceDecl, Finder, Builder); } /// \brief Matches Objective-C message expressions where the receiver is the @@ -93,11 +80,11 @@ return; Finder->addMatcher( - objcMessageExpr( - hasSelector("self"), isMessagingSuperInstance(), - hasAncestor(objcMethodDecl(isInitializer(), - hasDeclContext(objcImplementationDecl( - isSubclassOf(hasName("NSObject"))))))) + objcMessageExpr(hasSelector("self"), isMessagingSuperInstance(), + hasAncestor(objcMethodDecl( + isInitializer(), + hasDeclContext(objcImplementationDecl(hasInterface( + isDerivedFrom(hasName("NSObject")))))))) .bind("message"), this); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits