1 //===--- MinMaxUseInitializerListCheck.h - clang-tidy -----------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_MINMAXUSEINITIALIZERLISTCHECK_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_MINMAXUSEINITIALIZERLISTCHECK_H 11 12 #include "../ClangTidyCheck.h" 13 #include "../utils/IncludeInserter.h" 14 15 namespace clang::tidy::modernize { 16 17 /// Replaces nested ``std::min`` and ``std::max`` calls with an initializer list 18 /// where applicable. 19 /// 20 /// For example: 21 /// 22 /// \code 23 /// int a = std::max(std::max(i, j), k); 24 /// \endcode 25 /// 26 /// This code is transformed to: 27 /// 28 /// \code 29 /// int a = std::max({i, j, k}); 30 /// \endcode 31 class MinMaxUseInitializerListCheck : public ClangTidyCheck { 32 public: 33 MinMaxUseInitializerListCheck(StringRef Name, ClangTidyContext *Context); 34 35 void storeOptions(ClangTidyOptions::OptionMap &Opts) override; 36 void registerMatchers(ast_matchers::MatchFinder *Finder) override; 37 void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, 38 Preprocessor *ModuleExpanderPP) override; 39 void check(const ast_matchers::MatchFinder::MatchResult &Match) override; 40 isLanguageVersionSupported(const LangOptions & LangOpts)41 bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { 42 return LangOpts.CPlusPlus11; 43 } getCheckTraversalKind()44 std::optional<TraversalKind> getCheckTraversalKind() const override { 45 return TK_IgnoreUnlessSpelledInSource; 46 } 47 48 private: 49 bool IgnoreNonTrivialTypes; 50 std::uint64_t IgnoreTrivialTypesOfSizeAbove; 51 utils::IncludeInserter Inserter; 52 }; 53 54 } // namespace clang::tidy::modernize 55 56 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_MINMAXUSEINITIALIZERLISTCHECK_H 57