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