//===--- SuperSelfCheck.cpp - clang-tidy ----------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "SuperSelfCheck.h" #include "clang/AST/ASTContext.h" #include "clang/ASTMatchers/ASTMatchFinder.h" usingnamespaceclang::ast_matchers; namespace clang::tidy::objc { namespace { /// Matches Objective-C methods in the initializer family. /// /// Example matches -init and -initWithInt:. /// (matcher = objcMethodDecl(isInitializer())) /// \code /// @interface Foo /// - (instancetype)init; /// - (instancetype)initWithInt:(int)i; /// + (instancetype)init; /// - (void)bar; /// @end /// \endcode AST_MATCHER(ObjCMethodDecl, isInitializer) { … } /// Matches Objective-C implementations with interfaces that match /// \c Base. /// /// Example matches implementation declarations for X. /// (matcher = objcImplementationDecl(hasInterface(hasName("X")))) /// \code /// @interface X /// @end /// @implementation X /// @end /// @interface Y // @end /// @implementation Y /// @end /// \endcode AST_MATCHER_P(ObjCImplementationDecl, hasInterface, ast_matchers::internal::Matcher<ObjCInterfaceDecl>, Base) { … } /// Matches Objective-C message expressions where the receiver is the /// super instance. /// /// Example matches the invocations of -banana and -orange. /// (matcher = objcMessageExpr(isMessagingSuperInstance())) /// \code /// - (void)banana { /// [self apple] /// [super banana]; /// [super orange]; /// } /// \endcode AST_MATCHER(ObjCMessageExpr, isMessagingSuperInstance) { … } } // namespace void SuperSelfCheck::registerMatchers(MatchFinder *Finder) { … } void SuperSelfCheck::check(const MatchFinder::MatchResult &Result) { … } } // namespace clang::tidy::objc