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 "../misc/NonPrivateMemberVariablesInClassesCheck.h" |
13 | #include "../misc/UnconventionalAssignOperatorCheck.h" |
14 | #include "../modernize/AvoidCArraysCheck.h" |
15 | #include "../modernize/MacroToEnumCheck.h" |
16 | #include "../modernize/UseDefaultMemberInitCheck.h" |
17 | #include "../modernize/UseOverrideCheck.h" |
18 | #include "../performance/NoexceptDestructorCheck.h" |
19 | #include "../performance/NoexceptMoveConstructorCheck.h" |
20 | #include "../performance/NoexceptSwapCheck.h" |
21 | #include "../readability/MagicNumbersCheck.h" |
22 | #include "AvoidCapturingLambdaCoroutinesCheck.h" |
23 | #include "AvoidConstOrRefDataMembersCheck.h" |
24 | #include "AvoidDoWhileCheck.h" |
25 | #include "AvoidGotoCheck.h" |
26 | #include "AvoidNonConstGlobalVariablesCheck.h" |
27 | #include "AvoidReferenceCoroutineParametersCheck.h" |
28 | #include "InitVariablesCheck.h" |
29 | #include "InterfacesGlobalInitCheck.h" |
30 | #include "MacroUsageCheck.h" |
31 | #include "MisleadingCaptureDefaultByValueCheck.h" |
32 | #include "MissingStdForwardCheck.h" |
33 | #include "NarrowingConversionsCheck.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<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 | volatile int CppCoreGuidelinesModuleAnchorSource = 0; |
160 | |
161 | } // namespace clang::tidy |
162 | |