blob: 48797a41d83a8e9f5a9cb578d94eb5098884c490 [file] [log] [blame]
Samuel Benzaquenb2ccba52016-03-29 18:02:26 +00001//===--- DanglingHandleCheck.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_MISC_DANGLING_HANDLE_H
11#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_DANGLING_HANDLE_H
12
13#include "../ClangTidy.h"
14
15namespace clang {
16namespace tidy {
17namespace misc {
18
19/// Detect dangling references in value handlers like
20/// std::experimental::string_view.
21///
22/// For the user-facing documentation see:
23/// http://clang.llvm.org/extra/clang-tidy/checks/misc-dangling-handle.html
24class DanglingHandleCheck : public ClangTidyCheck {
25public:
26 DanglingHandleCheck(StringRef Name, ClangTidyContext *Context);
27 void registerMatchers(ast_matchers::MatchFinder *Finder) override;
28 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
29 void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
30
31private:
32 void registerMatchersForVariables(ast_matchers::MatchFinder *Finder);
33 void registerMatchersForReturn(ast_matchers::MatchFinder *Finder);
34
35 const std::vector<std::string> HandleClasses;
36 const ast_matchers::internal::Matcher<RecordDecl> IsAHandle;
37};
38
39} // namespace misc
40} // namespace tidy
41} // namespace clang
42
43#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_DANGLING_HANDLE_H