etienneb created this revision.
etienneb added a reviewer: alexfh.
etienneb added a subscriber: cfe-commits.
This patch is lifting matchers used by more than one checkers
to the common namespace.
http://reviews.llvm.org/D19841
Files:
clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
clang-tidy/modernize/UseNullptrCheck.cpp
clang-tidy/performance/FasterStringFindCheck.cpp
clang-tidy/readability/ImplicitBoolCastCheck.cpp
clang-tidy/readability/RedundantStringInitCheck.cpp
clang-tidy/utils/Matchers.h
Index: clang-tidy/utils/Matchers.h
===================================================================
--- clang-tidy/utils/Matchers.h
+++ clang-tidy/utils/Matchers.h
@@ -17,6 +17,19 @@
namespace tidy {
namespace matchers {
+AST_MATCHER_P(StringLiteral, lengthIs, unsigned, N) {
+ return Node.getLength() == N;
+}
+
+AST_MATCHER_P(Expr, ignoringImplicit,
+ ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
+ return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder);
+}
+
+AST_MATCHER_P(CastExpr, hasCastKind, CastKind, Kind) {
+ return Node.getCastKind() == Kind;
+}
+
AST_MATCHER(BinaryOperator, isRelationalOperator) {
return Node.isRelationalOp();
}
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<Expr>, 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(lengthIs(0)))));
const auto EmptyStringCtorExprWithTemporaries =
expr(ignoringImplicit(
Index: clang-tidy/readability/ImplicitBoolCastCheck.cpp
===================================================================
--- clang-tidy/readability/ImplicitBoolCastCheck.cpp
+++ clang-tidy/readability/ImplicitBoolCastCheck.cpp
@@ -8,22 +8,20 @@
//===----------------------------------------------------------------------===//
#include "ImplicitBoolCastCheck.h"
+#include "../utils/Matchers.h"
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Lex/Lexer.h"
using namespace clang::ast_matchers;
+using namespace clang::tidy::matchers;
namespace clang {
namespace tidy {
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();
Index: clang-tidy/performance/FasterStringFindCheck.cpp
===================================================================
--- clang-tidy/performance/FasterStringFindCheck.cpp
+++ clang-tidy/performance/FasterStringFindCheck.cpp
@@ -8,12 +8,14 @@
//===----------------------------------------------------------------------===//
#include "FasterStringFindCheck.h"
+#include "../utils/Matchers.h"
#include "clang/AST/ASTContext.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "llvm/ADT/Optional.h"
#include "llvm/Support/raw_ostream.h"
using namespace clang::ast_matchers;
+using namespace clang::tidy::matchers;
namespace clang {
namespace tidy {
@@ -51,8 +53,6 @@
return Result;
}
-AST_MATCHER(StringLiteral, lengthIsOne) { return Node.getLength() == 1; }
-
AST_MATCHER_FUNCTION(ast_matchers::internal::Matcher<Expr>,
hasSubstitutedType) {
return hasType(qualType(anyOf(substTemplateTypeParmType(),
@@ -79,7 +79,7 @@
return;
const auto SingleChar =
- expr(ignoringParenCasts(stringLiteral(lengthIsOne()).bind("literal")));
+ expr(ignoringParenCasts(stringLiteral(lengthIs(1)).bind("literal")));
const auto StringFindFunctions =
anyOf(hasName("find"), hasName("rfind"), hasName("find_first_of"),
Index: clang-tidy/modernize/UseNullptrCheck.cpp
===================================================================
--- clang-tidy/modernize/UseNullptrCheck.cpp
+++ clang-tidy/modernize/UseNullptrCheck.cpp
@@ -8,13 +8,15 @@
//===----------------------------------------------------------------------===//
#include "UseNullptrCheck.h"
+#include "../utils/Matchers.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Lex/Lexer.h"
using namespace clang;
using namespace clang::ast_matchers;
+using namespace clang::tidy::matchers;
using namespace llvm;
namespace clang {
@@ -24,20 +26,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<BuiltinType>(DesugaredType))
@@ -52,7 +40,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/misc/BoolPointerImplicitConversionCheck.cpp
===================================================================
--- clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
+++ clang-tidy/misc/BoolPointerImplicitConversionCheck.cpp
@@ -8,21 +8,15 @@
//===----------------------------------------------------------------------===//
#include "BoolPointerImplicitConversionCheck.h"
+#include "../utils/Matchers.h"
using namespace clang::ast_matchers;
+using namespace clang::tidy::matchers;
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 +26,7 @@
hasSourceExpression(expr(
hasType(pointerType(pointee(booleanType()))),
ignoringParenImpCasts(declRefExpr().bind("expr")))),
- isPointerToBoolean())))),
+ hasCastKind(CK_PointerToBoolean))))),
unless(isInTemplateInstantiation())).bind("if"),
this);
}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits