Index: clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp =================================================================== --- clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp +++ clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp @@ -15,14 +15,6 @@ namespace tidy { namespace misc { -namespace { - -AST_MATCHER(CastExpr, isPointerToBoolean) { - return Node.getCastKind() == CK_PointerToBoolean; -} - -} // namespace - void BoolPointerImplicitConversionCheck::registerMatchers(MatchFinder *Finder) { // Look for ifs that have an implicit bool* to bool conversion in the // condition. Filter negations. @@ -32,7 +24,7 @@ hasSourceExpression(expr( hasType(pointerType(pointee(booleanType()))), ignoringParenImpCasts(declRefExpr().bind("expr")))), - isPointerToBoolean())))), + hasCastKind(CK_PointerToBoolean))))), unless(isInTemplateInstantiation())).bind("if"), this); } Index: clang-tidy/modernize/UseNullptrCheck.cpp =================================================================== --- clang-tidy/modernize/UseNullptrCheck.cpp +++ clang-tidy/modernize/UseNullptrCheck.cpp @@ -24,20 +24,6 @@ const char CastSequence[] = "sequence"; -/// \brief Matches cast expressions that have a cast kind of CK_NullToPointer -/// or CK_NullToMemberPointer. -/// -/// Given -/// \code -/// int *p = 0; -/// \endcode -/// implicitCastExpr(isNullToPointer()) matches the implicit cast clang adds -/// around \c 0. -AST_MATCHER(CastExpr, isNullToPointer) { - return Node.getCastKind() == CK_NullToPointer || - Node.getCastKind() == CK_NullToMemberPointer; -} - AST_MATCHER(Type, sugaredNullptrType) { const Type *DesugaredType = Node.getUnqualifiedDesugaredType(); if (const BuiltinType *BT = dyn_cast(DesugaredType)) @@ -52,7 +38,8 @@ /// can be replaced instead of just the inner-most implicit cast. StatementMatcher makeCastSequenceMatcher() { StatementMatcher ImplicitCastToNull = implicitCastExpr( - isNullToPointer(), + anyOf(hasCastKind(CK_NullToPointer), + hasCastKind(CK_NullToMemberPointer)), unless(hasSourceExpression(hasType(sugaredNullptrType())))); return castExpr(anyOf(ImplicitCastToNull, Index: clang-tidy/performance/FasterStringFindCheck.cpp =================================================================== --- clang-tidy/performance/FasterStringFindCheck.cpp +++ clang-tidy/performance/FasterStringFindCheck.cpp @@ -38,8 +38,6 @@ return Result; } -AST_MATCHER(StringLiteral, lengthIsOne) { return Node.getLength() == 1; } - AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher, hasSubstitutedType) { return hasType(qualType(anyOf(substTemplateTypeParmType(), @@ -65,7 +63,7 @@ return; const auto SingleChar = - expr(ignoringParenCasts(stringLiteral(lengthIsOne()).bind("literal"))); + expr(ignoringParenCasts(stringLiteral(hasSize(1)).bind("literal"))); const auto StringFindFunctions = anyOf(hasName("find"), hasName("rfind"), hasName("find_first_of"), Index: clang-tidy/readability/ImplicitBoolCastCheck.cpp =================================================================== --- clang-tidy/readability/ImplicitBoolCastCheck.cpp +++ clang-tidy/readability/ImplicitBoolCastCheck.cpp @@ -20,10 +20,6 @@ namespace { -AST_MATCHER_P(CastExpr, hasCastKind, CastKind, Kind) { - return Node.getCastKind() == Kind; -} - AST_MATCHER(Stmt, isMacroExpansion) { SourceManager &SM = Finder->getASTContext().getSourceManager(); SourceLocation Loc = Node.getLocStart(); Index: clang-tidy/readability/RedundantStringInitCheck.cpp =================================================================== --- clang-tidy/readability/RedundantStringInitCheck.cpp +++ clang-tidy/readability/RedundantStringInitCheck.cpp @@ -8,25 +8,16 @@ //===----------------------------------------------------------------------===// #include "RedundantStringInitCheck.h" +#include "../utils/Matchers.h" #include "clang/ASTMatchers/ASTMatchers.h" using namespace clang::ast_matchers; +using namespace clang::tidy::matchers; namespace clang { namespace tidy { namespace readability { -namespace { - -AST_MATCHER(StringLiteral, lengthIsZero) { return Node.getLength() == 0; } - -AST_MATCHER_P(Expr, ignoringImplicit, - ast_matchers::internal::Matcher, InnerMatcher) { - return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder); -} - -} // namespace - void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) { if (!getLangOpts().CPlusPlus) return; @@ -45,7 +36,7 @@ const auto EmptyStringCtorExpr = cxxConstructExpr(StringConstructorExpr, hasArgument(0, ignoringParenImpCasts( - stringLiteral(lengthIsZero())))); + stringLiteral(hasSize(0))))); const auto EmptyStringCtorExprWithTemporaries = expr(ignoringImplicit( Index: clang-tidy/utils/Matchers.h =================================================================== --- clang-tidy/utils/Matchers.h +++ clang-tidy/utils/Matchers.h @@ -17,6 +17,11 @@ namespace tidy { namespace matchers { +AST_MATCHER_P(Expr, ignoringImplicit, + ast_matchers::internal::Matcher, InnerMatcher) { + return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder); +} + AST_MATCHER(BinaryOperator, isRelationalOperator) { return Node.isRelationalOp(); }