[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