[PATCH] D60543: [clang] Add matcher for subclasses of Objective-C interfaces 🔍

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 16 04:51:35 PDT 2019

aaron.ballman added reviewers: jordan_rose, rjmccall.
aaron.ballman added a comment.

Adding some ObjC experts in case they'd like to weigh in on the name `isDerivedFrom` in this context.

Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:1479
+/// \endcode
+AST_MATCHER_P(ObjCInterfaceDecl, isSubclassOfInterface,
+              internal::Matcher<ObjCInterfaceDecl>,
stephanemoore wrote:
> aaron.ballman wrote:
> > stephanemoore wrote:
> > > I am still uncertain about the naming.
> > > 
> > > `isSubclassOf` seemed too generic as that could apply to C++ classes.
> > > `objcIsSubclassOf` seemed unconventional as a matcher name.
> > > `isSubclassOfObjCInterface` and `isSubclassOfObjCClass` seemed awkwardly lengthy.
> > > Creating a new namespace `clang::ast_matchers::objc` seemed unprecedented.
> > > 
> > > I am happy to change the name if you think another name would be more appropriate.
> > Does ObjC use the term "derived" by any chance? We already have `isDerivedFrom`, so I'm wondering if we can use that to also match on an `ObjCInterfaceDecl`?
> Objective-C doesn't generally use the term "derived" (for example, see archive of [Programming With Objective-C > Defining Classes](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW1)). With that said, I don't think it's unreasonable or incorrect to use the term "derived" to describe inheritance in Objective-C. The behavior of this matcher is also consistent with the behavior of `isDerivedFrom`. In order to change `isDerivedFrom`, I would also need to update `isSameOrDerivedFrom`. That would probably be a good thing so that derivation matching feature set is consistent for C++ and Objective-C language variants.
> Let me take a crack at merging this into `isDerivedFrom`.
I agree that if we go with `isDerivedFrom`, you should update `isSameOrDerivedFrom` at the same time.

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list