9 #ifndef LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 10 #define LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 14 #include "llvm/ADT/StringMap.h" 15 #include "llvm/ADT/StringRef.h" 59 #ifndef CLANG_ANALYZER_API_VERSION_STRING 65 #define CLANG_ANALYZER_API_VERSION_STRING CLANG_VERSION_STRING 70 class AnalyzerOptions;
71 class DiagnosticsEngine;
87 checkerRegistrationFns = {});
105 StringRef DefaultValStr, StringRef Description,
106 StringRef DevelopmentStatus,
bool IsHidden)
107 : OptionType(OptionType), OptionName(OptionName),
108 DefaultValStr(DefaultValStr), Description(Description),
109 DevelopmentStatus(DevelopmentStatus), IsHidden(IsHidden) {
111 assert((OptionType ==
"bool" || OptionType ==
"string" ||
112 OptionType ==
"int") &&
113 "Unknown command line option type!");
115 assert((OptionType !=
"bool" ||
116 (DefaultValStr ==
"true" || DefaultValStr ==
"false")) &&
117 "Invalid value for boolean command line option! Maybe incorrect " 118 "parameters to the addCheckerOption or addPackageOption method?");
121 assert((OptionType !=
"int" || !DefaultValStr.getAsInteger(0, Tmp)) &&
122 "Invalid value for integer command line option! Maybe incorrect " 123 "parameters to the addCheckerOption or addPackageOption method?");
126 assert((DevelopmentStatus ==
"alpha" || DevelopmentStatus ==
"beta" ||
127 DevelopmentStatus ==
"released") &&
128 "Invalid development status!");
179 StringRef Name, StringRef Desc, StringRef DocsUri,
181 : Initialize(Fn), ShouldRegister(sfn), FullName(Name), Desc(Desc),
182 DocumentationUri(DocsUri), IsHidden(IsHidden) {}
208 template <
typename T>
static void initializeManager(
CheckerManager &mgr) {
212 template <
typename T>
static bool returnTrue(
const LangOptions &LO) {
220 StringRef FullName, StringRef Desc, StringRef DocsUri,
226 void addChecker(StringRef FullName, StringRef Desc, StringRef DocsUri,
227 bool IsHidden =
false) {
230 addChecker(&CheckerRegistry::initializeManager<T>,
231 &CheckerRegistry::returnTrue<T>, FullName, Desc, DocsUri,
237 void addDependency(StringRef FullName, StringRef Dependency);
251 bool IsHidden =
false);
266 StringRef OptionName, StringRef DefaultValStr,
267 StringRef Description, StringRef DevelopmentStatus,
268 bool IsHidden =
false);
283 size_t MaxNameChars = 30)
const;
302 llvm::StringMap<size_t> PackageSizes;
307 void resolveDependencies();
315 void resolveCheckerAndPackageOptions();
325 #endif // LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H Manages a set of available checkers for running a static analysis.
StringRef DevelopmentStatus
void addChecker(InitializationFunction Fn, ShouldRegisterFunction sfn, StringRef FullName, StringRef Desc, StringRef DocsUri, bool IsHidden)
Adds a checker to the registry.
CheckerInfo(StringRef FullName)
void addPackageOption(StringRef OptionType, StringRef PackageFullName, StringRef OptionName, StringRef DefaultValStr, StringRef Description, StringRef DevelopmentStatus, bool IsHidden=false)
Registers an option to a given package.
void printCheckerWithDescList(raw_ostream &Out, size_t MaxNameChars=30) const
Prints the name and description of all checkers in this registry.
void printEnabledCheckerList(raw_ostream &Out) const
bool isEnabled(const LangOptions &LO) const
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
bool operator==(const PackageInfo &Rhs) const
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
Concrete class used by the front-end to report problems and issues.
void addPackage(StringRef FullName)
Adds a package to the registry.
Defines version macros and version-related utility functions for Clang.
void addCheckerOption(StringRef OptionType, StringRef CheckerFullName, StringRef OptionName, StringRef DefaultValStr, StringRef Description, StringRef DevelopmentStatus, bool IsHidden=false)
Registers an option to a given checker.
void addChecker(StringRef FullName, StringRef Desc, StringRef DocsUri, bool IsHidden=false)
Adds a checker to the registry.
CmdLineOptionList CmdLineOptions
ConstCheckerInfoList Dependencies
CHECKER * registerChecker(AT &&... Args)
Used to register checkers.
bool(*)(const LangOptions &) ShouldRegisterFunction
void printCheckerOptionList(raw_ostream &Out) const
llvm::SetVector< const CheckerInfo * > CheckerInfoSet
Dataflow Directional Tag Classes.
llvm::iterator_range< CheckerInfoList::iterator > CheckerInfoListRange
void addDependency(StringRef FullName, StringRef Dependency)
Makes the checker with the full name fullName depends on the checker called dependency.
bool operator==(const CheckerInfo &Rhs) const
void(*)(CheckerManager &) InitializationFunction
Initialization functions perform any necessary setup for a checker.
std::vector< CheckerInfo > CheckerInfoList
bool isDisabled(const LangOptions &LO) const
CheckerRegistry(ArrayRef< std::string > plugins, DiagnosticsEngine &diags, AnalyzerOptions &AnOpts, const LangOptions &LangOpts, ArrayRef< std::function< void(CheckerRegistry &)>> checkerRegistrationFns={})
Stores options for the analyzer from the command line.
CmdLineOptionList CmdLineOptions
StringRef DocumentationUri
Specifies a command line option.
void validateCheckerOptions() const
Check if every option corresponds to a specific checker or package.
PackageInfo(StringRef FullName)
CheckerInfo(InitializationFunction Fn, ShouldRegisterFunction sfn, StringRef Name, StringRef Desc, StringRef DocsUri, bool IsHidden)
CmdLineOption(StringRef OptionType, StringRef OptionName, StringRef DefaultValStr, StringRef Description, StringRef DevelopmentStatus, bool IsHidden)