1ffe9f00cSFangrui Song //===-- CppCoreGuidelinesTidyModule.cpp - clang-tidy ----------------------===//
2aaa4080dSAaron Ballman //
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
6aaa4080dSAaron Ballman //
7aaa4080dSAaron Ballman //===----------------------------------------------------------------------===//
8aaa4080dSAaron Ballman 
9aaa4080dSAaron Ballman #include "../ClangTidy.h"
10aaa4080dSAaron Ballman #include "../ClangTidyModule.h"
11aaa4080dSAaron Ballman #include "../ClangTidyModuleRegistry.h"
126cfa38f1SRoman Lebedev #include "../misc/NonPrivateMemberVariablesInClassesCheck.h"
13112d1e80SGabor Horvath #include "../misc/UnconventionalAssignOperatorCheck.h"
142634bd59SRoman Lebedev #include "../modernize/AvoidCArraysCheck.h"
15da666233SJonas Toth #include "../modernize/UseOverrideCheck.h"
16bc8f5ac7SAaron Ballman #include "../readability/MagicNumbersCheck.h"
17f22f3489SJonas Toth #include "AvoidGotoCheck.h"
18512767ebSKim Viggedal #include "AvoidNonConstGlobalVariablesCheck.h"
19b879fd05SAaron Ballman #include "InitVariablesCheck.h"
20477e5d8dSAlexander Kornienko #include "InterfacesGlobalInitCheck.h"
21552b62edSJonas Toth #include "MacroUsageCheck.h"
221c0a15c4SClement Courbet #include "NarrowingConversionsCheck.h"
23ebdfb9cfSAlexander Kornienko #include "NoMallocCheck.h"
246ccc1c34SJonas Toth #include "OwningMemoryCheck.h"
254fc0214aSAdam Balogh #include "PreferMemberInitializerCheck.h"
26f3331969SMatthias Gehre #include "ProBoundsArrayToPointerDecayCheck.h"
2737f10a0cSMatthias Gehre #include "ProBoundsConstantArrayIndexCheck.h"
28dc48412cSMatthias Gehre #include "ProBoundsPointerArithmeticCheck.h"
290bf12982SAaron Ballman #include "ProTypeConstCastCheck.h"
30eeb71758SMatthias Gehre #include "ProTypeCstyleCastCheck.h"
31ffae543bSFelix Berger #include "ProTypeMemberInitCheck.h"
32aaa4080dSAaron Ballman #include "ProTypeReinterpretCastCheck.h"
33a704d4bbSMatthias Gehre #include "ProTypeStaticCastDowncastCheck.h"
34b785407cSMatthias Gehre #include "ProTypeUnionAccessCheck.h"
3527da2346SMatthias Gehre #include "ProTypeVarargCheck.h"
3622c9e931SClement Courbet #include "SlicingCheck.h"
377c7ea7d0SMandeep Singh Grang #include "SpecialMemberFunctionsCheck.h"
38*c58c7a6eSMarco Gartmann #include "VirtualClassDestructorCheck.h"
39aaa4080dSAaron Ballman 
40aaa4080dSAaron Ballman namespace clang {
41aaa4080dSAaron Ballman namespace tidy {
42aaa4080dSAaron Ballman namespace cppcoreguidelines {
43aaa4080dSAaron Ballman 
4436489cd3SMatthias Gehre /// A module containing checks of the C++ Core Guidelines
45aaa4080dSAaron Ballman class CppCoreGuidelinesModule : public ClangTidyModule {
46aaa4080dSAaron Ballman public:
addCheckFactories(ClangTidyCheckFactories & CheckFactories)47aaa4080dSAaron Ballman   void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
482634bd59SRoman Lebedev     CheckFactories.registerCheck<modernize::AvoidCArraysCheck>(
492634bd59SRoman Lebedev         "cppcoreguidelines-avoid-c-arrays");
50f22f3489SJonas Toth     CheckFactories.registerCheck<AvoidGotoCheck>(
51f22f3489SJonas Toth         "cppcoreguidelines-avoid-goto");
52bc8f5ac7SAaron Ballman     CheckFactories.registerCheck<readability::MagicNumbersCheck>(
53bc8f5ac7SAaron Ballman         "cppcoreguidelines-avoid-magic-numbers");
54512767ebSKim Viggedal     CheckFactories.registerCheck<AvoidNonConstGlobalVariablesCheck>(
55512767ebSKim Viggedal         "cppcoreguidelines-avoid-non-const-global-variables");
56da666233SJonas Toth     CheckFactories.registerCheck<modernize::UseOverrideCheck>(
57da666233SJonas Toth         "cppcoreguidelines-explicit-virtual-functions");
58b879fd05SAaron Ballman     CheckFactories.registerCheck<InitVariablesCheck>(
59b879fd05SAaron Ballman         "cppcoreguidelines-init-variables");
60fc07c3d9SJonas Toth     CheckFactories.registerCheck<InterfacesGlobalInitCheck>(
61fc07c3d9SJonas Toth         "cppcoreguidelines-interfaces-global-init");
62552b62edSJonas Toth     CheckFactories.registerCheck<MacroUsageCheck>(
63552b62edSJonas Toth         "cppcoreguidelines-macro-usage");
641c0a15c4SClement Courbet     CheckFactories.registerCheck<NarrowingConversionsCheck>(
651c0a15c4SClement Courbet         "cppcoreguidelines-narrowing-conversions");
66ebdfb9cfSAlexander Kornienko     CheckFactories.registerCheck<NoMallocCheck>("cppcoreguidelines-no-malloc");
676cfa38f1SRoman Lebedev     CheckFactories.registerCheck<misc::NonPrivateMemberVariablesInClassesCheck>(
686cfa38f1SRoman Lebedev         "cppcoreguidelines-non-private-member-variables-in-classes");
696ccc1c34SJonas Toth     CheckFactories.registerCheck<OwningMemoryCheck>(
706ccc1c34SJonas Toth         "cppcoreguidelines-owning-memory");
714fc0214aSAdam Balogh     CheckFactories.registerCheck<PreferMemberInitializerCheck>(
724fc0214aSAdam Balogh         "cppcoreguidelines-prefer-member-initializer");
73f3331969SMatthias Gehre     CheckFactories.registerCheck<ProBoundsArrayToPointerDecayCheck>(
74f3331969SMatthias Gehre         "cppcoreguidelines-pro-bounds-array-to-pointer-decay");
7537f10a0cSMatthias Gehre     CheckFactories.registerCheck<ProBoundsConstantArrayIndexCheck>(
7637f10a0cSMatthias Gehre         "cppcoreguidelines-pro-bounds-constant-array-index");
77dc48412cSMatthias Gehre     CheckFactories.registerCheck<ProBoundsPointerArithmeticCheck>(
78dc48412cSMatthias Gehre         "cppcoreguidelines-pro-bounds-pointer-arithmetic");
790bf12982SAaron Ballman     CheckFactories.registerCheck<ProTypeConstCastCheck>(
800bf12982SAaron Ballman         "cppcoreguidelines-pro-type-const-cast");
81eeb71758SMatthias Gehre     CheckFactories.registerCheck<ProTypeCstyleCastCheck>(
82eeb71758SMatthias Gehre         "cppcoreguidelines-pro-type-cstyle-cast");
83ffae543bSFelix Berger     CheckFactories.registerCheck<ProTypeMemberInitCheck>(
84ffae543bSFelix Berger         "cppcoreguidelines-pro-type-member-init");
85aaa4080dSAaron Ballman     CheckFactories.registerCheck<ProTypeReinterpretCastCheck>(
86aaa4080dSAaron Ballman         "cppcoreguidelines-pro-type-reinterpret-cast");
87a704d4bbSMatthias Gehre     CheckFactories.registerCheck<ProTypeStaticCastDowncastCheck>(
88a704d4bbSMatthias Gehre         "cppcoreguidelines-pro-type-static-cast-downcast");
89b785407cSMatthias Gehre     CheckFactories.registerCheck<ProTypeUnionAccessCheck>(
90b785407cSMatthias Gehre         "cppcoreguidelines-pro-type-union-access");
9127da2346SMatthias Gehre     CheckFactories.registerCheck<ProTypeVarargCheck>(
9227da2346SMatthias Gehre         "cppcoreguidelines-pro-type-vararg");
935d304b24SJonathan Coe     CheckFactories.registerCheck<SpecialMemberFunctionsCheck>(
945d304b24SJonathan Coe         "cppcoreguidelines-special-member-functions");
957c7ea7d0SMandeep Singh Grang     CheckFactories.registerCheck<SlicingCheck>("cppcoreguidelines-slicing");
96112d1e80SGabor Horvath     CheckFactories.registerCheck<misc::UnconventionalAssignOperatorCheck>(
9717b6feefSAaron Ballman         "cppcoreguidelines-c-copy-assignment-signature");
98*c58c7a6eSMarco Gartmann     CheckFactories.registerCheck<VirtualClassDestructorCheck>(
99*c58c7a6eSMarco Gartmann         "cppcoreguidelines-virtual-class-destructor");
100aaa4080dSAaron Ballman   }
1016cfa38f1SRoman Lebedev 
getModuleOptions()1026cfa38f1SRoman Lebedev   ClangTidyOptions getModuleOptions() override {
1036cfa38f1SRoman Lebedev     ClangTidyOptions Options;
1046cfa38f1SRoman Lebedev     ClangTidyOptions::OptionMap &Opts = Options.CheckOptions;
1056cfa38f1SRoman Lebedev 
1066cfa38f1SRoman Lebedev     Opts["cppcoreguidelines-non-private-member-variables-in-classes."
107e1c729c5SNathan James          "IgnoreClassesWithAllMemberVariablesBeingPublic"] = "true";
1086cfa38f1SRoman Lebedev 
1096cfa38f1SRoman Lebedev     return Options;
1106cfa38f1SRoman Lebedev   }
111aaa4080dSAaron Ballman };
112aaa4080dSAaron Ballman 
113aaa4080dSAaron Ballman // Register the LLVMTidyModule using this statically initialized variable.
114aaa4080dSAaron Ballman static ClangTidyModuleRegistry::Add<CppCoreGuidelinesModule>
115aaa4080dSAaron Ballman     X("cppcoreguidelines-module", "Adds checks for the C++ Core Guidelines.");
116aaa4080dSAaron Ballman 
117aaa4080dSAaron Ballman } // namespace cppcoreguidelines
118aaa4080dSAaron Ballman 
119aaa4080dSAaron Ballman // This anchor is used to force the linker to link in the generated object file
120aaa4080dSAaron Ballman // and thus register the CppCoreGuidelinesModule.
121aaa4080dSAaron Ballman volatile int CppCoreGuidelinesModuleAnchorSource = 0;
122aaa4080dSAaron Ballman 
123aaa4080dSAaron Ballman } // namespace tidy
124aaa4080dSAaron Ballman } // namespace clang
125