1 //===--- UnnecessaryValueParamCheck.h - clang-tidy---------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H
10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H
12 #include "../ClangTidyCheck.h"
13 #include "../utils/IncludeInserter.h"
14 #include "clang/Analysis/Analyses/ExprMutationAnalyzer.h"
16 namespace clang::tidy::performance
{
18 /// A check that flags value parameters of expensive to copy types that
19 /// can safely be converted to const references.
21 /// For the user-facing documentation see:
22 /// http://clang.llvm.org/extra/clang-tidy/checks/performance/unnecessary-value-param.html
23 class UnnecessaryValueParamCheck
: public ClangTidyCheck
{
25 UnnecessaryValueParamCheck(StringRef Name
, ClangTidyContext
*Context
);
26 bool isLanguageVersionSupported(const LangOptions
&LangOpts
) const override
{
27 return LangOpts
.CPlusPlus
;
29 void registerMatchers(ast_matchers::MatchFinder
*Finder
) override
;
30 void check(const ast_matchers::MatchFinder::MatchResult
&Result
) override
;
31 void registerPPCallbacks(const SourceManager
&SM
, Preprocessor
*PP
,
32 Preprocessor
*ModuleExpanderPP
) override
;
33 void storeOptions(ClangTidyOptions::OptionMap
&Opts
) override
;
34 void onEndOfTranslationUnit() override
;
37 // Create diagnostics. These are virtual so that derived classes can change
39 virtual void handleMoveFix(const ParmVarDecl
&Param
,
40 const DeclRefExpr
&CopyArgument
,
42 virtual void handleConstRefFix(const FunctionDecl
&Function
,
43 const ParmVarDecl
&Param
, ASTContext
&Context
);
46 ExprMutationAnalyzer::Memoized MutationAnalyzerCache
;
47 utils::IncludeInserter Inserter
;
48 const std::vector
<StringRef
> AllowedTypes
;
51 } // namespace clang::tidy::performance
53 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_UNNECESSARY_VALUE_PARAM_H