brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · afe2f08 Raw
49 lines · c
1//===----------------------------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FORRANGECOPYCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FORRANGECOPYCHECK_H11 12#include "../ClangTidyCheck.h"13 14namespace clang::tidy::performance {15 16/// A check that detects copied loop variables and suggests using const17/// references.18/// For the user-facing documentation see:19/// https://clang.llvm.org/extra/clang-tidy/checks/performance/for-range-copy.html20class ForRangeCopyCheck : public ClangTidyCheck {21public:22  ForRangeCopyCheck(StringRef Name, ClangTidyContext *Context);23  bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {24    return LangOpts.CPlusPlus11;25  }26  void storeOptions(ClangTidyOptions::OptionMap &Opts) override;27  void registerMatchers(ast_matchers::MatchFinder *Finder) override;28  void check(const ast_matchers::MatchFinder::MatchResult &Result) override;29 30private:31  // Checks if the loop variable is a const value and expensive to copy. If so32  // suggests it be converted to a const reference.33  bool handleConstValueCopy(const VarDecl &LoopVar, ASTContext &Context);34 35  // Checks if the loop variable is a non-const value and whether only36  // const methods are invoked on it or whether it is only used as a const37  // reference argument. If so it suggests it be made a const reference.38  bool handleCopyIsOnlyConstReferenced(const VarDecl &LoopVar,39                                       const CXXForRangeStmt &ForRange,40                                       ASTContext &Context);41 42  const bool WarnOnAllAutoCopies;43  const std::vector<StringRef> AllowedTypes;44};45 46} // namespace clang::tidy::performance47 48#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_PERFORMANCE_FORRANGECOPYCHECK_H49