ClangTidyStats
runClangTidy(std::unique_ptr<ClangTidyOptionsProvider> OptionsProvider,
             const tooling::CompilationDatabase &Compilations,
             ArrayRef<std::string> InputFiles,
             std::vector<ClangTidyError> *Errors, ProfileData *Profile) {
  ClangTool Tool(Compilations, InputFiles);
  clang::tidy::ClangTidyContext Context(std::move(OptionsProvider));
  if (Profile)
    Context.setCheckProfileData(Profile);

  ClangTidyDiagnosticConsumer DiagConsumer(Context);

  Tool.setDiagnosticConsumer(&DiagConsumer);

  class ActionFactory : public FrontendActionFactory {
  public:
    ActionFactory(ClangTidyContext &Context) : ConsumerFactory(Context) {}
    FrontendAction *create() override { return new Action(&ConsumerFactory); }

  private:
    class Action : public ASTFrontendAction {
    public:
      Action(ClangTidyASTConsumerFactory *Factory) : Factory(Factory) {}
      std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &Compiler,
                                                     StringRef File) override {
        return Factory->CreateASTConsumer(Compiler, File);
      }

    private:
      ClangTidyASTConsumerFactory *Factory;
    };

    ClangTidyASTConsumerFactory ConsumerFactory;
  };

  ActionFactory Factory(Context);
  Tool.run(&Factory);
  *Errors = Context.getErrors();
  return Context.getStats();
}
Beispiel #2
0
ClangTidyStats runClangTidy(ClangTidyOptionsProvider *OptionsProvider,
                            const tooling::CompilationDatabase &Compilations,
                            ArrayRef<std::string> InputFiles,
                            std::vector<ClangTidyError> *Errors) {
    ClangTool Tool(Compilations, InputFiles);
    clang::tidy::ClangTidyContext Context(OptionsProvider);
    ClangTidyDiagnosticConsumer DiagConsumer(Context);

    Tool.setDiagnosticConsumer(&DiagConsumer);

    class ActionFactory : public FrontendActionFactory {
    public:
        ActionFactory(ClangTidyASTConsumerFactory *ConsumerFactory)
            : ConsumerFactory(ConsumerFactory) {}
        FrontendAction *create() override {
            return new Action(ConsumerFactory);
        }

    private:
        class Action : public ASTFrontendAction {
        public:
            Action(ClangTidyASTConsumerFactory *Factory) : Factory(Factory) {}
            ASTConsumer *CreateASTConsumer(CompilerInstance &Compiler,
                                           StringRef File) override {
                return Factory->CreateASTConsumer(Compiler, File);
            }

        private:
            ClangTidyASTConsumerFactory *Factory;
        };

        ClangTidyASTConsumerFactory *ConsumerFactory;
    };

    Tool.run(new ActionFactory(new ClangTidyASTConsumerFactory(Context)));
    *Errors = Context.getErrors();
    return Context.getStats();
}