[clang-tools-extra] [llvm] [clang] Add clang-tidy check to suggest replacement of conditional statement with std::min/std::max (PR #77816)

Piotr Zegar via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 22 11:34:09 PST 2024


================
@@ -18,6 +18,45 @@ namespace clang::tidy::readability {
 
 static const llvm::StringRef AlgorithmHeader("<algorithm>");
 
+static bool MinCondition(const BinaryOperator::Opcode &Op,const Expr *CondLhs,const Expr *CondRhs,const Expr *AssignLhs,const Expr *AssignRhs,const ASTContext &Context){
+  return ((Op == BO_LT || Op == BO_LE) &&
+       (tidy::utils::areStatementsIdentical(CondLhs, AssignRhs, Context) &&
+        tidy::utils::areStatementsIdentical(CondRhs, AssignLhs, Context))) || 
+        ((Op == BO_GT || Op == BO_GE) && 
+        (tidy::utils::areStatementsIdentical(CondLhs, AssignLhs, Context) &&
+        tidy::utils::areStatementsIdentical(CondRhs, AssignRhs, Context)));
+}
+
+static bool MaxCondition(const BinaryOperator::Opcode &Op,const Expr *CondLhs,const Expr *CondRhs,const Expr *AssignLhs,const Expr *AssignRhs,const ASTContext &Context){
+  return ((Op == BO_LT || Op == BO_LE) &&
+              (tidy::utils::areStatementsIdentical(CondLhs, AssignLhs,
+                                                   Context) &&
+               tidy::utils::areStatementsIdentical(CondRhs, AssignRhs,
+                                                   Context))) ||
+             ((Op == BO_GT || Op == BO_GE) &&
+              (tidy::utils::areStatementsIdentical(CondLhs, AssignRhs,
+                                                   Context) &&
+               tidy::utils::areStatementsIdentical(CondRhs, AssignLhs,
+                                                   Context)));
+}
+
+static std::string CreateReplacement(const bool UseMax,const BinaryOperator::Opcode &Op,const Expr *CondLhs,const Expr *CondRhs,const Expr *AssignLhs,const ASTContext &Context,const SourceManager &Source,const LangOptions &LO){
+  const auto *FunctionName = UseMax ? "std::max" : "std::min";
----------------
PiotrZSL wrote:

just take FunctionName as argument

https://github.com/llvm/llvm-project/pull/77816


More information about the cfe-commits mailing list