Author: Stephen Kelly Date: 2021-02-27T12:11:42Z New Revision: 296c6e85c19b7fc224109fe43af2fd9ed1d3d510
URL: https://github.com/llvm/llvm-project/commit/296c6e85c19b7fc224109fe43af2fd9ed1d3d510 DIFF: https://github.com/llvm/llvm-project/commit/296c6e85c19b7fc224109fe43af2fd9ed1d3d510.diff LOG: [clang-tidy] Simplify shrink to fit check Differential Revision: https://reviews.llvm.org/D97144 Added: Modified: clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp b/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp index 7911a56a9a75..411f04eb5ee9 100644 --- a/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.cpp @@ -21,31 +21,24 @@ namespace modernize { void ShrinkToFitCheck::registerMatchers(MatchFinder *Finder) { // Swap as a function need not to be considered, because rvalue can not // be bound to a non-const reference. - const auto ShrinkableAsMember = - memberExpr(member(valueDecl().bind("ContainerDecl"))); - const auto ShrinkableAsDecl = - declRefExpr(hasDeclaration(valueDecl().bind("ContainerDecl"))); - const auto CopyCtorCall = cxxConstructExpr(hasArgument( - 0, anyOf(ShrinkableAsMember, ShrinkableAsDecl, - unaryOperator(has(ignoringParenImpCasts(ShrinkableAsMember))), - unaryOperator(has(ignoringParenImpCasts(ShrinkableAsDecl)))))); - const auto SwapParam = - expr(anyOf(memberExpr(member(equalsBoundNode("ContainerDecl"))), - declRefExpr(hasDeclaration(equalsBoundNode("ContainerDecl"))), - unaryOperator(has(ignoringParenImpCasts( - memberExpr(member(equalsBoundNode("ContainerDecl")))))), - unaryOperator(has(ignoringParenImpCasts(declRefExpr( - hasDeclaration(equalsBoundNode("ContainerDecl")))))))); + const auto ShrinkableExpr = mapAnyOf(memberExpr, declRefExpr); + const auto Shrinkable = + ShrinkableExpr.with(hasDeclaration(valueDecl().bind("ContainerDecl"))); + const auto BoundShrinkable = ShrinkableExpr.with( + hasDeclaration(valueDecl(equalsBoundNode("ContainerDecl")))); Finder->addMatcher( cxxMemberCallExpr( - on(hasType(hasCanonicalType(hasDeclaration(namedDecl( - hasAnyName("std::basic_string", "std::deque", "std::vector")))))), callee(cxxMethodDecl(hasName("swap"))), - has(ignoringParenImpCasts( - memberExpr(traverse(TK_AsIs, hasDescendant(CopyCtorCall))))), - hasArgument(0, SwapParam.bind("ContainerToShrink")), - unless(isInTemplateInstantiation())) + hasArgument( + 0, anyOf(Shrinkable, unaryOperator(hasUnaryOperand(Shrinkable)))), + on(cxxConstructExpr(hasArgument( + 0, + expr(anyOf(BoundShrinkable, + unaryOperator(hasUnaryOperand(BoundShrinkable))), + hasType(hasCanonicalType(hasDeclaration(namedDecl(hasAnyName( + "std::basic_string", "std::deque", "std::vector")))))) + .bind("ContainerToShrink"))))) .bind("CopyAndSwapTrick"), this); } diff --git a/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h b/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h index 336485572bb8..6ea0522d6571 100644 --- a/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h +++ b/clang-tools-extra/clang-tidy/modernize/ShrinkToFitCheck.h @@ -30,6 +30,9 @@ class ShrinkToFitCheck : public ClangTidyCheck { } void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; + llvm::Optional<TraversalKind> getCheckTraversalKind() const override { + return TK_IgnoreUnlessSpelledInSource; + } }; } // namespace modernize _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits