9 #include "../ClangTidy.h"
10 #include "../ClangTidyDiagnosticConsumer.h"
11 #include "../ClangTidyForceLinker.h"
12 #include "../ClangTidyModule.h"
13 #include "clang/Frontend/CompilerInstance.h"
14 #include "clang/Frontend/FrontendPluginRegistry.h"
15 #include "clang/Frontend/MultiplexConsumer.h"
27 std::unique_ptr<ClangTidyContext> Context;
28 std::unique_ptr<DiagnosticsEngine> DiagEngine;
31 WrapConsumer(std::unique_ptr<ClangTidyContext> Context,
32 std::unique_ptr<DiagnosticsEngine> DiagEngine,
33 std::vector<std::unique_ptr<ASTConsumer>> Consumer)
35 DiagEngine(std::move(DiagEngine)) {}
40 StringRef File)
override {
42 auto ExternalDiagEngine = &Compiler.getDiagnostics();
45 auto DiagEngine = std::make_unique<DiagnosticsEngine>(
46 new DiagnosticIDs,
new DiagnosticOptions, DiagConsumer);
47 Context->setDiagnosticsEngine(DiagEngine.get());
51 std::vector<std::unique_ptr<ASTConsumer>> Vec;
54 return std::make_unique<WrapConsumer>(
55 std::move(Context), std::move(DiagEngine), std::move(Vec));
59 const std::vector<std::string> &Args)
override {
66 for (StringRef Arg : Args)
67 if (Arg.startswith(
"-checks="))
68 OverrideOptions.
Checks = std::string(Arg.substr(strlen(
"-checks=")));
70 auto Options = std::make_unique<FileOptionsProvider>(
71 GlobalOptions, DefaultOptions, OverrideOptions);
72 Context = std::make_unique<ClangTidyContext>(std::move(Options));
77 std::unique_ptr<ClangTidyContext> Context;
86 static clang::FrontendPluginRegistry::Add<clang::tidy::ClangTidyPluginAction>
87 X(
"clang-tidy",
"clang-tidy");