blob: d349fdbfb7cbbd14cff04b17088c85a6ff0c6a00 [file] [log] [blame]
Alexander Kornienko04970842015-08-19 09:11:46 +00001//===--- LoopConvertCheck.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_MODERNIZE_LOOP_CONVERT_H
11#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_LOOP_CONVERT_H
12
13#include "../ClangTidy.h"
14#include "LoopConvertUtils.h"
15
16namespace clang {
17namespace tidy {
18namespace modernize {
19
20class LoopConvertCheck : public ClangTidyCheck {
21public:
22 LoopConvertCheck(StringRef Name, ClangTidyContext *Context);
23 void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
24 void registerMatchers(ast_matchers::MatchFinder *Finder) override;
25 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
26
27private:
Angel Garcia Gomezd930ef72015-09-08 09:01:21 +000028 struct RangeDescriptor {
29 bool ContainerNeedsDereference;
Angel Garcia Gomezbb9ca542015-09-11 10:02:07 +000030 bool DerefByConstRef;
Angel Garcia Gomezd930ef72015-09-08 09:01:21 +000031 bool DerefByValue;
32 bool IsTriviallyCopyable;
Angel Garcia Gomezd930ef72015-09-08 09:01:21 +000033 };
34
Alexander Kornienko04970842015-08-19 09:11:46 +000035 void doConversion(ASTContext *Context, const VarDecl *IndexVar,
36 const VarDecl *MaybeContainer, StringRef ContainerString,
37 const UsageResult &Usages, const DeclStmt *AliasDecl,
38 bool AliasUseRequired, bool AliasFromForInit,
Angel Garcia Gomezd930ef72015-09-08 09:01:21 +000039 const ForStmt *TheLoop, RangeDescriptor Descriptor);
Alexander Kornienko04970842015-08-19 09:11:46 +000040
41 StringRef checkRejections(ASTContext *Context, const Expr *ContainerExpr,
42 const ForStmt *TheLoop);
43
44 void findAndVerifyUsages(ASTContext *Context, const VarDecl *LoopVar,
45 const VarDecl *EndVar, const Expr *ContainerExpr,
Angel Garcia Gomezd930ef72015-09-08 09:01:21 +000046 const Expr *BoundExpr, const ForStmt *TheLoop,
47 LoopFixerKind FixerKind, RangeDescriptor Descriptor);
48
Alexander Kornienko04970842015-08-19 09:11:46 +000049 std::unique_ptr<TUTrackingInfo> TUInfo;
50 Confidence::Level MinConfidence;
51};
52
53} // namespace modernize
54} // namespace tidy
55} // namespace clang
56
57#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_LOOP_CONVERT_H