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

source code of clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp