diff options
author | Etienne Bergeron <etienneb@google.com> | 2016-05-17 19:36:09 +0000 |
---|---|---|
committer | Etienne Bergeron <etienneb@google.com> | 2016-05-17 19:36:09 +0000 |
commit | e15ef2f6093430bb3a7965f05c18795501a65129 (patch) | |
tree | 285596e64fda3bf3df66e4258d9d5c0ed43cdf98 | |
parent | de96f39392fedb5f2f538377a57ba52b2d7e346f (diff) | |
download | bcm5719-llvm-e15ef2f6093430bb3a7965f05c18795501a65129.tar.gz bcm5719-llvm-e15ef2f6093430bb3a7965f05c18795501a65129.zip |
[clang-tidy] Lift common matchers to utils namespace
Summary:
This patch is lifting matchers used by more than one checkers
to the common namespace.
Reviewers: aaron.ballman, alexfh
Subscribers: aaron.ballman, cfe-commits
Differential Revision: http://reviews.llvm.org/D19841
llvm-svn: 269804
6 files changed, 12 insertions, 43 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp index da295be1a16..cd86fea3dff 100644 --- a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp @@ -15,14 +15,6 @@ namespace clang { 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 @@ void BoolPointerImplicitConversionCheck::registerMatchers(MatchFinder *Finder) { hasSourceExpression(expr( hasType(pointerType(pointee(booleanType()))), ignoringParenImpCasts(declRefExpr().bind("expr")))), - isPointerToBoolean())))), + hasCastKind(CK_PointerToBoolean))))), unless(isInTemplateInstantiation())).bind("if"), this); } diff --git a/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp index 03fb4a8bd3e..059c0c5073f 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp @@ -24,20 +24,6 @@ namespace { 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<BuiltinType>(DesugaredType)) @@ -52,7 +38,8 @@ AST_MATCHER(Type, sugaredNullptrType) { /// 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, diff --git a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp index 893458f49cd..ab2dff48a9f 100644 --- a/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp +++ b/clang-tools-extra/clang-tidy/performance/FasterStringFindCheck.cpp @@ -38,8 +38,6 @@ llvm::Optional<std::string> MakeCharacterLiteral(const StringLiteral *Literal) { return Result; } -AST_MATCHER(StringLiteral, lengthIsOne) { return Node.getLength() == 1; } - AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<Expr>, hasSubstitutedType) { return hasType(qualType(anyOf(substTemplateTypeParmType(), @@ -65,7 +63,7 @@ void FasterStringFindCheck::registerMatchers(MatchFinder *Finder) { 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"), diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolCastCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolCastCheck.cpp index f9c7b01d857..6f80ccfaf03 100644 --- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolCastCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolCastCheck.cpp @@ -20,10 +20,6 @@ namespace readability { 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(); diff --git a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp index 2997e5d2555..17ae4ef3d3a 100644 --- a/clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp +++ b/clang-tools-extra/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<Expr>, InnerMatcher) { - return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder); -} - -} // namespace - void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) { if (!getLangOpts().CPlusPlus) return; @@ -45,7 +36,7 @@ void RedundantStringInitCheck::registerMatchers(MatchFinder *Finder) { const auto EmptyStringCtorExpr = cxxConstructExpr(StringConstructorExpr, hasArgument(0, ignoringParenImpCasts( - stringLiteral(lengthIsZero())))); + stringLiteral(hasSize(0))))); const auto EmptyStringCtorExprWithTemporaries = expr(ignoringImplicit( diff --git a/clang-tools-extra/clang-tidy/utils/Matchers.h b/clang-tools-extra/clang-tidy/utils/Matchers.h index 70a68d7fa98..1f3f6dfd57f 100644 --- a/clang-tools-extra/clang-tidy/utils/Matchers.h +++ b/clang-tools-extra/clang-tidy/utils/Matchers.h @@ -17,6 +17,11 @@ namespace clang { namespace tidy { namespace matchers { +AST_MATCHER_P(Expr, ignoringImplicit, + ast_matchers::internal::Matcher<Expr>, InnerMatcher) { + return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder); +} + AST_MATCHER(BinaryOperator, isRelationalOperator) { return Node.isRelationalOp(); } |