xref: /llvm-project/clang-tools-extra/clang-tidy/objc/ObjCTidyModule.cpp (revision 7d2ea6c422d3f5712b7253407005e1a465a76946)
1abcd64ccSHaojian Wu //===--- ObjCTidyModule.cpp - clang-tidy --------------------------------===//
2abcd64ccSHaojian Wu //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6abcd64ccSHaojian Wu //
7abcd64ccSHaojian Wu //===----------------------------------------------------------------------===//
8abcd64ccSHaojian Wu 
9abcd64ccSHaojian Wu #include "../ClangTidy.h"
10abcd64ccSHaojian Wu #include "../ClangTidyModule.h"
11abcd64ccSHaojian Wu #include "../ClangTidyModuleRegistry.h"
12aba8f320SVy Nguyen #include "AssertEquals.h"
138c348b33SYan Zhang #include "AvoidNSErrorInitCheck.h"
140151ddc2SMichael Wyman #include "DeallocInCategoryCheck.h"
15e010406eSHaojian Wu #include "ForbiddenSubclassingCheck.h"
162f6a5281SStephane Moore #include "MissingHashCheck.h"
1795a92995SRashmi Mudduluru #include "NSDateFormatterCheck.h"
1889f1321fSMichael Wyman #include "NSInvocationArgumentLifetimeCheck.h"
1952161a5aSBen Hamilton #include "PropertyDeclarationCheck.h"
20b0c1f8c0SStephane Moore #include "SuperSelfCheck.h"
21abcd64ccSHaojian Wu 
22abcd64ccSHaojian Wu using namespace clang::ast_matchers;
23abcd64ccSHaojian Wu 
24*7d2ea6c4SCarlos Galvez namespace clang::tidy {
25abcd64ccSHaojian Wu namespace objc {
26abcd64ccSHaojian Wu 
27abcd64ccSHaojian Wu class ObjCModule : public ClangTidyModule {
28abcd64ccSHaojian Wu public:
addCheckFactories(ClangTidyCheckFactories & CheckFactories)29abcd64ccSHaojian Wu   void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
308c348b33SYan Zhang     CheckFactories.registerCheck<AvoidNSErrorInitCheck>(
318c348b33SYan Zhang         "objc-avoid-nserror-init");
32aba8f320SVy Nguyen     CheckFactories.registerCheck<AssertEquals>("objc-assert-equals");
33aba8f320SVy Nguyen 
340151ddc2SMichael Wyman     CheckFactories.registerCheck<DeallocInCategoryCheck>(
350151ddc2SMichael Wyman         "objc-dealloc-in-category");
36e010406eSHaojian Wu     CheckFactories.registerCheck<ForbiddenSubclassingCheck>(
37e010406eSHaojian Wu         "objc-forbidden-subclassing");
382f6a5281SStephane Moore     CheckFactories.registerCheck<MissingHashCheck>(
392f6a5281SStephane Moore         "objc-missing-hash");
4095a92995SRashmi Mudduluru     CheckFactories.registerCheck<NSDateFormatterCheck>("objc-nsdate-formatter");
4189f1321fSMichael Wyman     CheckFactories.registerCheck<NSInvocationArgumentLifetimeCheck>(
4289f1321fSMichael Wyman         "objc-nsinvocation-argument-lifetime");
4352161a5aSBen Hamilton     CheckFactories.registerCheck<PropertyDeclarationCheck>(
4452161a5aSBen Hamilton         "objc-property-declaration");
45b0c1f8c0SStephane Moore     CheckFactories.registerCheck<SuperSelfCheck>(
46b0c1f8c0SStephane Moore         "objc-super-self");
47abcd64ccSHaojian Wu   }
48abcd64ccSHaojian Wu };
49abcd64ccSHaojian Wu 
50abcd64ccSHaojian Wu // Register the ObjCTidyModule using this statically initialized variable.
51abcd64ccSHaojian Wu static ClangTidyModuleRegistry::Add<ObjCModule> X(
52abcd64ccSHaojian Wu     "objc-module",
53abcd64ccSHaojian Wu     "Adds Objective-C lint checks.");
54abcd64ccSHaojian Wu 
55abcd64ccSHaojian Wu } // namespace objc
56abcd64ccSHaojian Wu 
57abcd64ccSHaojian Wu // This anchor is used to force the linker to link in the generated object file
58abcd64ccSHaojian Wu // and thus register the ObjCModule.
59abcd64ccSHaojian Wu volatile int ObjCModuleAnchorSource = 0;
60abcd64ccSHaojian Wu 
61*7d2ea6c4SCarlos Galvez } // namespace clang::tidy
62