[PATCH] D66270: [clang-tidy] Migrate objc-super-self to use isDerivedFrom 🚛
Stephane Moore via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 14 19:59:39 PDT 2019
stephanemoore created this revision.
stephanemoore added reviewers: aaron.ballman, gribozavr.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.
This migrates objc-super-self to `isDerivedFrom` as it now supports
matching Objective-C interface declarations.
Test Notes:
Ran clang tools tests.
Repository:
rG LLVM Github Monorepo
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.
-///
-/// Note that a class is not considered to be a subclass of itself.
+/// \brief Matches Objective-C implementations with interfaces that match
+/// \c Base.
///
/// Example matches implementation declarations for Y and Z.
-/// (matcher = objcInterfaceDecl(isSubclassOf(hasName("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);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66270.215310.patch
Type: text/x-patch
Size: 2718 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190815/54e922b0/attachment.bin>
More information about the cfe-commits
mailing list