================ @@ -171,10 +182,64 @@ void UseStartsEndsWithCheck::registerMatchers(MatchFinder *Finder) { hasRHS(lengthExprForStringNode("needle"))))) .bind("expr"), this); + + Finder->addMatcher( + cxxOperatorCallExpr( + hasAnyOperatorName("==", "!="), + anyOf( + hasOperands( + cxxMemberCallExpr( + argumentCountIs(2), hasArgument(0, ZeroLiteral), + hasArgument(1, lengthExprForStringNode("needle")), + callee( + cxxMethodDecl(hasName("substr"), + ofClass(OnClassWithStartsWithFunction)) + .bind("find_fun"))) + .bind("find_expr"), + expr().bind("needle")), + hasOperands(expr().bind("needle"), + cxxMemberCallExpr( + argumentCountIs(2), hasArgument(0, ZeroLiteral), + hasArgument(1, lengthExprForStringNode("needle")), + callee(cxxMethodDecl( + hasName("substr"), + ofClass(OnClassWithStartsWithFunction)) + .bind("find_fun"))) + .bind("find_expr")))) + .bind("expr"), + this); +} + +bool UseStartsEndsWithCheck::isNegativeComparison(const Expr* ComparisonExpr) { + // Handle direct != operator ---------------- nicovank wrote:
Comments are misleading IMO, in fact every operator handled here is `!=`, just under different AST nodes. I think just remove the comments, it's pretty clear with the casting what's happening. ```suggestion ``` https://github.com/llvm/llvm-project/pull/116033 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits