clang-tools
15.0.0git
llvm-project
clang-tools-extra
clang-tidy
utils
TransformerClangTidyCheck.h
Go to the documentation of this file.
1
//===---------- TransformerClangTidyCheck.h - clang-tidy ------------------===//
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_TRANSFORMER_CLANG_TIDY_CHECK_H
10
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_TRANSFORMER_CLANG_TIDY_CHECK_H
11
12
#include "../ClangTidyCheck.h"
13
#include "
IncludeInserter.h
"
14
#include "
IncludeSorter.h
"
15
#include "clang/ASTMatchers/ASTMatchFinder.h"
16
#include "clang/Tooling/Transformer/Transformer.h"
17
18
namespace
clang
{
19
namespace
tidy {
20
namespace
utils {
21
22
/// A base class for defining a ClangTidy check based on a `RewriteRule`.
23
//
24
// For example, given a rule `MyCheckAsRewriteRule`, one can define a tidy check
25
// as follows:
26
//
27
// class MyCheck : public TransformerClangTidyCheck {
28
// public:
29
// MyCheck(StringRef Name, ClangTidyContext *Context)
30
// : TransformerClangTidyCheck(MyCheckAsRewriteRule, Name, Context) {}
31
// };
32
//
33
// `TransformerClangTidyCheck` recognizes this clang-tidy option:
34
//
35
// * IncludeStyle. A string specifying which file naming convention is used by
36
// the source code, 'llvm' or 'google'. Default is 'llvm'. The naming
37
// convention influences how canonical headers are distinguished from other
38
// includes.
39
class
TransformerClangTidyCheck
:
public
ClangTidyCheck
{
40
public
:
41
TransformerClangTidyCheck
(StringRef
Name
,
ClangTidyContext
*Context);
42
43
/// DEPRECATED: prefer the two argument constructor in conjunction with
44
/// \c setRule.
45
///
46
/// \p MakeRule generates the rewrite rule to be used by the check, based on
47
/// the given language and clang-tidy options. It can return \c None to handle
48
/// cases where the options disable the check.
49
///
50
/// See \c setRule for constraints on the rule.
51
TransformerClangTidyCheck
(
52
std::function<Optional<transformer::RewriteRuleWith<std::string>>(
53
const
LangOptions &,
const
OptionsView
&)>
54
MakeRule,
55
StringRef
Name
,
ClangTidyContext
*Context);
56
57
/// Convenience overload of the constructor when the rule doesn't have any
58
/// dependencies.
59
TransformerClangTidyCheck
(transformer::RewriteRuleWith<std::string> R,
60
StringRef
Name
,
ClangTidyContext
*Context);
61
62
void
registerPPCallbacks
(
const
SourceManager &SM, Preprocessor *
PP
,
63
Preprocessor *ModuleExpanderPP)
override
;
64
void
registerMatchers
(ast_matchers::MatchFinder *Finder)
final
;
65
void
check
(
const
ast_matchers::MatchFinder::MatchResult &Result)
final
;
66
67
/// Derived classes that override this function should call this method from
68
/// the overridden method.
69
void
storeOptions
(
ClangTidyOptions::OptionMap
&Opts)
override
;
70
71
/// Set the rule that this check implements. All cases in the rule must have
72
/// a non-null \c Explanation, even though \c Explanation is optional for
73
/// RewriteRule in general. Because the primary purpose of clang-tidy checks
74
/// is to provide users with diagnostics, we assume that a missing explanation
75
/// is a bug. If no explanation is desired, indicate that explicitly (for
76
/// example, by passing `text("no explanation")` to `makeRule` as the
77
/// `Explanation` argument).
78
void
setRule
(transformer::RewriteRuleWith<std::string> R);
79
80
private
:
81
transformer::RewriteRuleWith<std::string> Rule;
82
IncludeInserter
Inserter;
83
};
84
85
}
// namespace utils
86
}
// namespace tidy
87
}
// namespace clang
88
89
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_TRANSFORMER_CLANG_TIDY_CHECK_H
clang::tidy::ClangTidyOptions::OptionMap
llvm::StringMap< ClangTidyValue > OptionMap
Definition:
ClangTidyOptions.h:115
clang::tidy::utils::IncludeInserter
Produces fixes to insert specified includes to source files, if not yet present.
Definition:
IncludeInserter.h:55
clang::tidy::utils::TransformerClangTidyCheck::check
void check(const ast_matchers::MatchFinder::MatchResult &Result) final
ClangTidyChecks that register ASTMatchers should do the actual work in here.
Definition:
TransformerClangTidyCheck.cpp:103
clang::tidy::ClangTidyCheck
Base class for all clang-tidy checks.
Definition:
ClangTidyCheck.h:53
clang::tidy::utils::TransformerClangTidyCheck::registerMatchers
void registerMatchers(ast_matchers::MatchFinder *Finder) final
Override this to register AST matchers with Finder.
Definition:
TransformerClangTidyCheck.cpp:96
clang::tidy::utils::TransformerClangTidyCheck::TransformerClangTidyCheck
TransformerClangTidyCheck(StringRef Name, ClangTidyContext *Context)
Definition:
TransformerClangTidyCheck.cpp:57
clang::tidy::ClangTidyContext
Every ClangTidyCheck reports errors through a DiagnosticsEngine provided by this context.
Definition:
ClangTidyDiagnosticConsumer.h:67
clang::tidy::utils::TransformerClangTidyCheck::registerPPCallbacks
void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override
Override this to register PPCallbacks in the preprocessor.
Definition:
TransformerClangTidyCheck.cpp:91
Name
Token Name
Definition:
MacroToEnumCheck.cpp:89
clang::tidy::bugprone::PP
static Preprocessor * PP
Definition:
BadSignalToKillThreadCheck.cpp:29
clang::tidy::utils::TransformerClangTidyCheck
A base class for defining a ClangTidy check based on a RewriteRule.
Definition:
TransformerClangTidyCheck.h:39
IncludeSorter.h
clang
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Definition:
ApplyReplacements.h:27
clang::tidy::utils::TransformerClangTidyCheck::setRule
void setRule(transformer::RewriteRuleWith< std::string > R)
Set the rule that this check implements.
Definition:
TransformerClangTidyCheck.cpp:85
clang::tidy::utils::TransformerClangTidyCheck::storeOptions
void storeOptions(ClangTidyOptions::OptionMap &Opts) override
Derived classes that override this function should call this method from the overridden method.
Definition:
TransformerClangTidyCheck.cpp:143
IncludeInserter.h
clang::tidy::ClangTidyCheck::OptionsView
Provides access to the ClangTidyCheck options via check-local names.
Definition:
ClangTidyCheck.h:139
Generated on Thu Jun 23 2022 17:22:56 for clang-tools by
1.8.17