1 //===--- EasilySwappableParametersCheck.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_BUGPRONE_EASILYSWAPPABLEPARAMETERSCHECK_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_EASILYSWAPPABLEPARAMETERSCHECK_H 11 12 #include "../ClangTidyCheck.h" 13 14 namespace clang::tidy::bugprone { 15 16 /// Finds function definitions where parameters of convertible types follow 17 /// each other directly, making call sites prone to calling the function with 18 /// swapped (or badly ordered) arguments. 19 /// 20 /// For the user-facing documentation see: 21 /// http://clang.llvm.org/extra/clang-tidy/checks/bugprone/easily-swappable-parameters.html 22 class EasilySwappableParametersCheck : public ClangTidyCheck { 23 public: 24 EasilySwappableParametersCheck(StringRef Name, ClangTidyContext *Context); 25 void registerMatchers(ast_matchers::MatchFinder *Finder) override; 26 void check(const ast_matchers::MatchFinder::MatchResult &Result) override; 27 void storeOptions(ClangTidyOptions::OptionMap &Opts) override; 28 29 /// The minimum length of an adjacent swappable parameter range required for 30 /// a diagnostic. 31 const std::size_t MinimumLength; 32 33 /// The parameter names (as written in the source text) to be ignored. 34 const std::vector<StringRef> IgnoredParameterNames; 35 36 /// The parameter typename suffixes (as written in the source code) to be 37 /// ignored. 38 const std::vector<StringRef> IgnoredParameterTypeSuffixes; 39 40 /// Whether to consider differently qualified versions of the same type 41 /// mixable. 42 const bool QualifiersMix; 43 44 /// Whether to model implicit conversions "in full" (conditions apply) 45 /// during analysis and consider types that are implicitly convertible to 46 /// one another mixable. 47 const bool ModelImplicitConversions; 48 49 /// If enabled, diagnostics for parameters that are used together in a 50 /// similar way are not emitted. 51 const bool SuppressParametersUsedTogether; 52 53 /// The number of characters two parameter names might be dissimilar at 54 /// either end for the report about the parameters to be silenced. 55 /// E.g. the names "LHS" and "RHS" are 1-dissimilar suffixes of each other, 56 /// while "Text1" and "Text2" are 1-dissimilar prefixes of each other. 57 const std::size_t NamePrefixSuffixSilenceDissimilarityTreshold; 58 }; 59 60 } // namespace clang::tidy::bugprone 61 62 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_EASILYSWAPPABLEPARAMETERSCHECK_H 63