| 1 | //===-- CppCoreGuidelinesTidyModule.cpp - clang-tidy ----------------------===// |
|---|---|
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | #include "../ClangTidy.h" |
| 10 | #include "../ClangTidyModule.h" |
| 11 | #include "../ClangTidyModuleRegistry.h" |
| 12 | #include "../bugprone/NarrowingConversionsCheck.h" |
| 13 | #include "../misc/NonPrivateMemberVariablesInClassesCheck.h" |
| 14 | #include "../misc/UnconventionalAssignOperatorCheck.h" |
| 15 | #include "../modernize/AvoidCArraysCheck.h" |
| 16 | #include "../modernize/MacroToEnumCheck.h" |
| 17 | #include "../modernize/UseDefaultMemberInitCheck.h" |
| 18 | #include "../modernize/UseOverrideCheck.h" |
| 19 | #include "../performance/NoexceptDestructorCheck.h" |
| 20 | #include "../performance/NoexceptMoveConstructorCheck.h" |
| 21 | #include "../performance/NoexceptSwapCheck.h" |
| 22 | #include "../readability/MagicNumbersCheck.h" |
| 23 | #include "AvoidCapturingLambdaCoroutinesCheck.h" |
| 24 | #include "AvoidConstOrRefDataMembersCheck.h" |
| 25 | #include "AvoidDoWhileCheck.h" |
| 26 | #include "AvoidGotoCheck.h" |
| 27 | #include "AvoidNonConstGlobalVariablesCheck.h" |
| 28 | #include "AvoidReferenceCoroutineParametersCheck.h" |
| 29 | #include "InitVariablesCheck.h" |
| 30 | #include "InterfacesGlobalInitCheck.h" |
| 31 | #include "MacroUsageCheck.h" |
| 32 | #include "MisleadingCaptureDefaultByValueCheck.h" |
| 33 | #include "MissingStdForwardCheck.h" |
| 34 | #include "NoMallocCheck.h" |
| 35 | #include "NoSuspendWithLockCheck.h" |
| 36 | #include "OwningMemoryCheck.h" |
| 37 | #include "PreferMemberInitializerCheck.h" |
| 38 | #include "ProBoundsArrayToPointerDecayCheck.h" |
| 39 | #include "ProBoundsConstantArrayIndexCheck.h" |
| 40 | #include "ProBoundsPointerArithmeticCheck.h" |
| 41 | #include "ProTypeConstCastCheck.h" |
| 42 | #include "ProTypeCstyleCastCheck.h" |
| 43 | #include "ProTypeMemberInitCheck.h" |
| 44 | #include "ProTypeReinterpretCastCheck.h" |
| 45 | #include "ProTypeStaticCastDowncastCheck.h" |
| 46 | #include "ProTypeUnionAccessCheck.h" |
| 47 | #include "ProTypeVarargCheck.h" |
| 48 | #include "RvalueReferenceParamNotMovedCheck.h" |
| 49 | #include "SlicingCheck.h" |
| 50 | #include "SpecialMemberFunctionsCheck.h" |
| 51 | #include "VirtualClassDestructorCheck.h" |
| 52 | |
| 53 | namespace clang::tidy { |
| 54 | namespace cppcoreguidelines { |
| 55 | |
| 56 | /// A module containing checks of the C++ Core Guidelines |
| 57 | class CppCoreGuidelinesModule : public ClangTidyModule { |
| 58 | public: |
| 59 | void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { |
| 60 | CheckFactories.registerCheck<AvoidCapturingLambdaCoroutinesCheck>( |
| 61 | CheckName: "cppcoreguidelines-avoid-capturing-lambda-coroutines"); |
| 62 | CheckFactories.registerCheck<modernize::AvoidCArraysCheck>( |
| 63 | CheckName: "cppcoreguidelines-avoid-c-arrays"); |
| 64 | CheckFactories.registerCheck<AvoidConstOrRefDataMembersCheck>( |
| 65 | CheckName: "cppcoreguidelines-avoid-const-or-ref-data-members"); |
| 66 | CheckFactories.registerCheck<AvoidDoWhileCheck>( |
| 67 | CheckName: "cppcoreguidelines-avoid-do-while"); |
| 68 | CheckFactories.registerCheck<AvoidGotoCheck>( |
| 69 | CheckName: "cppcoreguidelines-avoid-goto"); |
| 70 | CheckFactories.registerCheck<readability::MagicNumbersCheck>( |
| 71 | CheckName: "cppcoreguidelines-avoid-magic-numbers"); |
| 72 | CheckFactories.registerCheck<AvoidNonConstGlobalVariablesCheck>( |
| 73 | CheckName: "cppcoreguidelines-avoid-non-const-global-variables"); |
| 74 | CheckFactories.registerCheck<AvoidReferenceCoroutineParametersCheck>( |
| 75 | CheckName: "cppcoreguidelines-avoid-reference-coroutine-parameters"); |
| 76 | CheckFactories.registerCheck<modernize::UseOverrideCheck>( |
| 77 | CheckName: "cppcoreguidelines-explicit-virtual-functions"); |
| 78 | CheckFactories.registerCheck<InitVariablesCheck>( |
| 79 | CheckName: "cppcoreguidelines-init-variables"); |
| 80 | CheckFactories.registerCheck<InterfacesGlobalInitCheck>( |
| 81 | CheckName: "cppcoreguidelines-interfaces-global-init"); |
| 82 | CheckFactories.registerCheck<modernize::MacroToEnumCheck>( |
| 83 | CheckName: "cppcoreguidelines-macro-to-enum"); |
| 84 | CheckFactories.registerCheck<MacroUsageCheck>( |
| 85 | CheckName: "cppcoreguidelines-macro-usage"); |
| 86 | CheckFactories.registerCheck<MisleadingCaptureDefaultByValueCheck>( |
| 87 | CheckName: "cppcoreguidelines-misleading-capture-default-by-value"); |
| 88 | CheckFactories.registerCheck<MissingStdForwardCheck>( |
| 89 | CheckName: "cppcoreguidelines-missing-std-forward"); |
| 90 | CheckFactories.registerCheck<bugprone::NarrowingConversionsCheck>( |
| 91 | CheckName: "cppcoreguidelines-narrowing-conversions"); |
| 92 | CheckFactories.registerCheck<NoMallocCheck>(CheckName: "cppcoreguidelines-no-malloc"); |
| 93 | CheckFactories.registerCheck<NoSuspendWithLockCheck>( |
| 94 | CheckName: "cppcoreguidelines-no-suspend-with-lock"); |
| 95 | CheckFactories.registerCheck<performance::NoexceptDestructorCheck>( |
| 96 | CheckName: "cppcoreguidelines-noexcept-destructor"); |
| 97 | CheckFactories.registerCheck<performance::NoexceptMoveConstructorCheck>( |
| 98 | CheckName: "cppcoreguidelines-noexcept-move-operations"); |
| 99 | CheckFactories.registerCheck<performance::NoexceptSwapCheck>( |
| 100 | CheckName: "cppcoreguidelines-noexcept-swap"); |
| 101 | CheckFactories.registerCheck<misc::NonPrivateMemberVariablesInClassesCheck>( |
| 102 | CheckName: "cppcoreguidelines-non-private-member-variables-in-classes"); |
| 103 | CheckFactories.registerCheck<OwningMemoryCheck>( |
| 104 | CheckName: "cppcoreguidelines-owning-memory"); |
| 105 | CheckFactories.registerCheck<PreferMemberInitializerCheck>( |
| 106 | CheckName: "cppcoreguidelines-prefer-member-initializer"); |
| 107 | CheckFactories.registerCheck<ProBoundsArrayToPointerDecayCheck>( |
| 108 | CheckName: "cppcoreguidelines-pro-bounds-array-to-pointer-decay"); |
| 109 | CheckFactories.registerCheck<ProBoundsConstantArrayIndexCheck>( |
| 110 | CheckName: "cppcoreguidelines-pro-bounds-constant-array-index"); |
| 111 | CheckFactories.registerCheck<ProBoundsPointerArithmeticCheck>( |
| 112 | CheckName: "cppcoreguidelines-pro-bounds-pointer-arithmetic"); |
| 113 | CheckFactories.registerCheck<ProTypeConstCastCheck>( |
| 114 | CheckName: "cppcoreguidelines-pro-type-const-cast"); |
| 115 | CheckFactories.registerCheck<ProTypeCstyleCastCheck>( |
| 116 | CheckName: "cppcoreguidelines-pro-type-cstyle-cast"); |
| 117 | CheckFactories.registerCheck<ProTypeMemberInitCheck>( |
| 118 | CheckName: "cppcoreguidelines-pro-type-member-init"); |
| 119 | CheckFactories.registerCheck<ProTypeReinterpretCastCheck>( |
| 120 | CheckName: "cppcoreguidelines-pro-type-reinterpret-cast"); |
| 121 | CheckFactories.registerCheck<ProTypeStaticCastDowncastCheck>( |
| 122 | CheckName: "cppcoreguidelines-pro-type-static-cast-downcast"); |
| 123 | CheckFactories.registerCheck<ProTypeUnionAccessCheck>( |
| 124 | CheckName: "cppcoreguidelines-pro-type-union-access"); |
| 125 | CheckFactories.registerCheck<ProTypeVarargCheck>( |
| 126 | CheckName: "cppcoreguidelines-pro-type-vararg"); |
| 127 | CheckFactories.registerCheck<RvalueReferenceParamNotMovedCheck>( |
| 128 | CheckName: "cppcoreguidelines-rvalue-reference-param-not-moved"); |
| 129 | CheckFactories.registerCheck<SpecialMemberFunctionsCheck>( |
| 130 | CheckName: "cppcoreguidelines-special-member-functions"); |
| 131 | CheckFactories.registerCheck<SlicingCheck>(CheckName: "cppcoreguidelines-slicing"); |
| 132 | CheckFactories.registerCheck<modernize::UseDefaultMemberInitCheck>( |
| 133 | CheckName: "cppcoreguidelines-use-default-member-init"); |
| 134 | CheckFactories.registerCheck<misc::UnconventionalAssignOperatorCheck>( |
| 135 | CheckName: "cppcoreguidelines-c-copy-assignment-signature"); |
| 136 | CheckFactories.registerCheck<VirtualClassDestructorCheck>( |
| 137 | CheckName: "cppcoreguidelines-virtual-class-destructor"); |
| 138 | } |
| 139 | |
| 140 | ClangTidyOptions getModuleOptions() override { |
| 141 | ClangTidyOptions Options; |
| 142 | ClangTidyOptions::OptionMap &Opts = Options.CheckOptions; |
| 143 | |
| 144 | Opts["cppcoreguidelines-non-private-member-variables-in-classes." |
| 145 | "IgnoreClassesWithAllMemberVariablesBeingPublic"] = "true"; |
| 146 | |
| 147 | return Options; |
| 148 | } |
| 149 | }; |
| 150 | |
| 151 | // Register the LLVMTidyModule using this statically initialized variable. |
| 152 | static ClangTidyModuleRegistry::Add<CppCoreGuidelinesModule> |
| 153 | X("cppcoreguidelines-module", "Adds checks for the C++ Core Guidelines."); |
| 154 | |
| 155 | } // namespace cppcoreguidelines |
| 156 | |
| 157 | // This anchor is used to force the linker to link in the generated object file |
| 158 | // and thus register the CppCoreGuidelinesModule. |
| 159 | // NOLINTNEXTLINE(misc-use-internal-linkage) |
| 160 | volatile int CppCoreGuidelinesModuleAnchorSource = 0; |
| 161 | |
| 162 | } // namespace clang::tidy |
| 163 |
