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