CheckerOptionHandling.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
  2. #include "clang/StaticAnalyzer/Core/Checker.h"
  3. #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
  4. #include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h"
  5. using namespace clang;
  6. using namespace ento;
  7. namespace {
  8. struct MyChecker : public Checker<check::BeginFunction> {
  9. void checkBeginFunction(CheckerContext &Ctx) const {}
  10. };
  11. void registerMyChecker(CheckerManager &Mgr) {
  12. MyChecker *Checker = Mgr.registerChecker<MyChecker>();
  13. llvm::outs() << "Example option is set to "
  14. << (Mgr.getAnalyzerOptions().getCheckerBooleanOption(
  15. Checker, "ExampleOption")
  16. ? "true"
  17. : "false")
  18. << '\n';
  19. }
  20. bool shouldRegisterMyChecker(const LangOptions &LO) { return true; }
  21. } // end anonymous namespace
  22. // Register plugin!
  23. extern "C" void clang_registerCheckers(CheckerRegistry &registry) {
  24. registry.addChecker(registerMyChecker, shouldRegisterMyChecker,
  25. "example.MyChecker", "Example Description",
  26. "example.mychecker.documentation.nonexistent.html",
  27. /*isHidden*/false);
  28. registry.addCheckerOption(/*OptionType*/ "bool",
  29. /*CheckerFullName*/ "example.MyChecker",
  30. /*OptionName*/ "ExampleOption",
  31. /*DefaultValStr*/ "false",
  32. /*Description*/ "This is an example checker opt.");
  33. }
  34. extern "C" const char clang_analyzerAPIVersionString[] =
  35. CLANG_ANALYZER_API_VERSION_STRING;