Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
aaron.ballman added inline comments. Comment at: clang-tidy/utils/Matchers.h:20 @@ -19,1 +19,3 @@ +AST_MATCHER_P(Expr, ignoringImplicit, + ast_matchers::internal::Matcher, InnerMatcher) { alexfh wrote: > Consider moving this to ASTMatchers.h in a follow-up. Honestly, this one is a lot less interesting as a public AST matcher. I would avoid that unless there's a really solid case for it. http://reviews.llvm.org/D19841 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
alexfh accepted this revision. alexfh added a comment. This revision is now accepted and ready to land. LG. Thank you! Comment at: clang-tidy/utils/Matchers.h:20 @@ -19,1 +19,3 @@ +AST_MATCHER_P(Expr, ignoringImplicit, + ast_matchers::internal::Matcher, InnerMatcher) { Consider moving this to ASTMatchers.h in a follow-up. http://reviews.llvm.org/D19841 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
etienneb updated this revision to Diff 57316. etienneb added a comment. nits: indent 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,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(); } 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/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 = Finder->getASTContext().getSourceManager(); SourceLocation Loc = Node.getLocStart(); 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/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/misc/BoolPointerImplicitConversionCheck.cpp
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
etienneb updated this revision to Diff 57314. etienneb marked an inline comment as done. etienneb added a comment. rebase over trunk. matchers are lifted to ASTMatchers. 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,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(); } 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/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 = Finder->getASTContext().getSourceManager(); SourceLocation Loc = Node.getLocStart(); 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/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,
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
alexfh added a comment. In http://reviews.llvm.org/D19841#419488, @etienneb wrote: > Who is the owner of ASTMatcher? > > If he is willing to receive these matchers in ASTMatcher, I'll lift them. > Otherwise, we should at least lift them within clang-tidy. Send a patch to sbenza or klimek. I think, these matchers are generic enough to be useful in the core matchers library. http://reviews.llvm.org/D19841 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
etienneb added a comment. Who is the owner of ASTMatcher? If he is willing to receive these matchers in ASTMatcher, I'll lift them. Otherwise, we should at least lift them within clang-tidy. http://reviews.llvm.org/D19841 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D19841: [clang-tidy] Lift common matchers to utils namespace
alexfh requested changes to this revision. This revision now requires changes to proceed. Comment at: clang-tidy/utils/Matchers.h:20 @@ -19,1 +19,3 @@ +AST_MATCHER_P(StringLiteral, lengthIs, unsigned, N) { + return Node.getLength() == N; All these should go to ASTMatchers.h (with tests and documentation). http://reviews.llvm.org/D19841 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits