blob: a1d6586931edc4712c7d37bfb6fba3da966749d8 [file] [log] [blame]
Felix Berger3c8edde2016-03-29 02:42:38 +00001//===--- UnnecessaryValueParamCheck.h - clang-tidy---------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H
11#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H
12
13#include "../ClangTidy.h"
Felix Berger7f882752016-07-01 20:12:15 +000014#include "../utils/IncludeInserter.h"
Shuai Wang4b845292018-09-17 17:59:51 +000015#include "clang/Analysis/Analyses/ExprMutationAnalyzer.h"
Felix Berger3c8edde2016-03-29 02:42:38 +000016
17namespace clang {
18namespace tidy {
19namespace performance {
20
21/// \brief A check that flags value parameters of expensive to copy types that
22/// can safely be converted to const references.
23///
24/// For the user-facing documentation see:
25/// http://clang.llvm.org/extra/clang-tidy/checks/performance-unnecessary-value-param.html
26class UnnecessaryValueParamCheck : public ClangTidyCheck {
27public:
Felix Berger7f882752016-07-01 20:12:15 +000028 UnnecessaryValueParamCheck(StringRef Name, ClangTidyContext *Context);
Felix Berger3c8edde2016-03-29 02:42:38 +000029 void registerMatchers(ast_matchers::MatchFinder *Finder) override;
30 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
Felix Berger7f882752016-07-01 20:12:15 +000031 void registerPPCallbacks(CompilerInstance &Compiler) override;
32 void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
Shuai Wang4b845292018-09-17 17:59:51 +000033 void onEndOfTranslationUnit() override;
Felix Berger7f882752016-07-01 20:12:15 +000034
35private:
36 void handleMoveFix(const ParmVarDecl &Var, const DeclRefExpr &CopyArgument,
37 const ASTContext &Context);
38
Shuai Wang4b845292018-09-17 17:59:51 +000039 llvm::DenseMap<const FunctionDecl *, FunctionParmMutationAnalyzer>
40 MutationAnalyzers;
Felix Berger7f882752016-07-01 20:12:15 +000041 std::unique_ptr<utils::IncludeInserter> Inserter;
42 const utils::IncludeSorter::IncludeStyle IncludeStyle;
Adam Baloghabd72e92018-10-12 13:05:21 +000043 const std::vector<std::string> AllowedTypes;
Felix Berger3c8edde2016-03-29 02:42:38 +000044};
45
46} // namespace performance
47} // namespace tidy
48} // namespace clang
49
50#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H