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