comparison clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children 2e18cbf3894f
comparison
equal deleted inserted replaced
172:9fbae9c8bf63 173:0572611fdcc8
14 using namespace clang::ast_matchers; 14 using namespace clang::ast_matchers;
15 15
16 namespace clang { 16 namespace clang {
17 namespace tidy { 17 namespace tidy {
18 namespace modernize { 18 namespace modernize {
19
20 namespace {
21 AST_MATCHER_P(InitListExpr, initCountIs, unsigned, N) {
22 return Node.getNumInits() == N;
23 }
24 } // namespace
19 25
20 static StringRef getValueOfValueInit(const QualType InitType) { 26 static StringRef getValueOfValueInit(const QualType InitType) {
21 switch (InitType->getScalarTypeKind()) { 27 switch (InitType->getScalarTypeKind()) {
22 case Type::STK_CPointer: 28 case Type::STK_CPointer:
23 case Type::STK_BlockPointer: 29 case Type::STK_BlockPointer:
178 } 184 }
179 185
180 UseDefaultMemberInitCheck::UseDefaultMemberInitCheck(StringRef Name, 186 UseDefaultMemberInitCheck::UseDefaultMemberInitCheck(StringRef Name,
181 ClangTidyContext *Context) 187 ClangTidyContext *Context)
182 : ClangTidyCheck(Name, Context), 188 : ClangTidyCheck(Name, Context),
183 UseAssignment(Options.get("UseAssignment", 0) != 0), 189 UseAssignment(Options.get("UseAssignment", false)),
184 IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true) != 0) {} 190 IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true)) {}
185 191
186 void UseDefaultMemberInitCheck::storeOptions( 192 void UseDefaultMemberInitCheck::storeOptions(
187 ClangTidyOptions::OptionMap &Opts) { 193 ClangTidyOptions::OptionMap &Opts) {
188 Options.store(Opts, "UseAssignment", UseAssignment); 194 Options.store(Opts, "UseAssignment", UseAssignment);
189 Options.store(Opts, "IgnoreMacros", IgnoreMacros); 195 Options.store(Opts, "IgnoreMacros", IgnoreMacros);
190 } 196 }
191 197
192 void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) { 198 void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
193 if (!getLangOpts().CPlusPlus11) 199 auto InitBase =
194 return;
195
196 auto Init =
197 anyOf(stringLiteral(), characterLiteral(), integerLiteral(), 200 anyOf(stringLiteral(), characterLiteral(), integerLiteral(),
198 unaryOperator(anyOf(hasOperatorName("+"), hasOperatorName("-")), 201 unaryOperator(hasAnyOperatorName("+", "-"),
199 hasUnaryOperand(integerLiteral())), 202 hasUnaryOperand(integerLiteral())),
200 floatLiteral(), 203 floatLiteral(),
201 unaryOperator(anyOf(hasOperatorName("+"), hasOperatorName("-")), 204 unaryOperator(hasAnyOperatorName("+", "-"),
202 hasUnaryOperand(floatLiteral())), 205 hasUnaryOperand(floatLiteral())),
203 cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(), 206 cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(),
204 initListExpr(), declRefExpr(to(enumConstantDecl()))); 207 declRefExpr(to(enumConstantDecl())));
208
209 auto Init =
210 anyOf(initListExpr(anyOf(
211 allOf(initCountIs(1), hasInit(0, ignoringImplicit(InitBase))),
212 initCountIs(0))),
213 InitBase);
205 214
206 Finder->addMatcher( 215 Finder->addMatcher(
207 cxxConstructorDecl( 216 cxxConstructorDecl(
208 isDefaultConstructor(), unless(isInstantiated()), 217 isDefaultConstructor(), unless(isInstantiated()),
209 forEachConstructorInitializer( 218 forEachConstructorInitializer(
210 cxxCtorInitializer( 219 cxxCtorInitializer(
211 forField(unless(anyOf(getLangOpts().CPlusPlus2a 220 forField(unless(anyOf(getLangOpts().CPlusPlus20
212 ? unless(anything()) 221 ? unless(anything())
213 : isBitField(), 222 : isBitField(),
214 hasInClassInitializer(anything()), 223 hasInClassInitializer(anything()),
215 hasParent(recordDecl(isUnion()))))), 224 hasParent(recordDecl(isUnion()))))),
216 isWritten(), withInitializer(ignoringImplicit(Init))) 225 isWritten(), withInitializer(ignoringImplicit(Init)))