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