Index: clang-tidy/ClangTidy.h =================================================================== --- clang-tidy/ClangTidy.h +++ clang-tidy/ClangTidy.h @@ -11,6 +11,7 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANG_TIDY_H #include "ClangTidyDiagnosticConsumer.h" +#include "ClangTidyOptions.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceManager.h" @@ -115,11 +116,10 @@ /// \brief Fills the list of check names that are enabled when the provided /// filters are applied. -std::vector getCheckNames(StringRef EnableChecksRegex, - StringRef DisableChecksRegex); +std::vector getCheckNames(const ClangTidyOptions &Options); /// \brief Run a set of clang-tidy checks on a set of files. -void runClangTidy(StringRef EnableChecksRegex, StringRef DisableChecksRegex, +void runClangTidy(const ClangTidyOptions &Options, const tooling::CompilationDatabase &Compilations, ArrayRef Ranges, SmallVectorImpl *Errors); Index: clang-tidy/ClangTidy.cpp =================================================================== --- clang-tidy/ClangTidy.cpp +++ clang-tidy/ClangTidy.cpp @@ -285,24 +285,21 @@ CheckName = Name.str(); } -std::vector getCheckNames(StringRef EnableChecksRegex, - StringRef DisableChecksRegex) { +std::vector getCheckNames(const ClangTidyOptions &Options) { SmallVector Errors; - clang::tidy::ClangTidyContext Context(&Errors, EnableChecksRegex, - DisableChecksRegex); + clang::tidy::ClangTidyContext Context(&Errors, Options); ClangTidyASTConsumerFactory Factory(Context); return Factory.getCheckNames(); } -void runClangTidy(StringRef EnableChecksRegex, StringRef DisableChecksRegex, +void runClangTidy(const ClangTidyOptions &Options, const tooling::CompilationDatabase &Compilations, ArrayRef Ranges, SmallVectorImpl *Errors) { // FIXME: Ranges are currently full files. Support selecting specific // (line-)ranges. ClangTool Tool(Compilations, Ranges); - clang::tidy::ClangTidyContext Context(Errors, EnableChecksRegex, - DisableChecksRegex); + clang::tidy::ClangTidyContext Context(Errors, Options); ClangTidyDiagnosticConsumer DiagConsumer(Context); Tool.setDiagnosticConsumer(&DiagConsumer); Index: clang-tidy/ClangTidyDiagnosticConsumer.h =================================================================== --- clang-tidy/ClangTidyDiagnosticConsumer.h +++ clang-tidy/ClangTidyDiagnosticConsumer.h @@ -28,6 +28,8 @@ namespace tidy { +struct ClangTidyOptions; + /// \brief A message from a clang-tidy check. /// /// Note that this is independent of a \c SourceManager. @@ -59,7 +61,7 @@ /// \brief Filters checks by name. class ChecksFilter { public: - ChecksFilter(StringRef EnableChecksRegex, StringRef DisableChecksRegex); + ChecksFilter(const ClangTidyOptions& Options); bool isCheckEnabled(StringRef Name); private: @@ -79,7 +81,7 @@ class ClangTidyContext { public: ClangTidyContext(SmallVectorImpl *Errors, - StringRef EnableChecksRegex, StringRef DisableChecksRegex); + const ClangTidyOptions &Options); /// \brief Report any errors detected using this method. /// Index: clang-tidy/ClangTidyDiagnosticConsumer.cpp =================================================================== --- clang-tidy/ClangTidyDiagnosticConsumer.cpp +++ clang-tidy/ClangTidyDiagnosticConsumer.cpp @@ -18,6 +18,7 @@ #include "ClangTidyDiagnosticConsumer.h" +#include "ClangTidyOptions.h" #include "clang/Frontend/DiagnosticRenderer.h" #include "llvm/ADT/SmallString.h" @@ -113,19 +114,17 @@ ClangTidyError::ClangTidyError(StringRef CheckName) : CheckName(CheckName) {} -ChecksFilter::ChecksFilter(StringRef EnableChecksRegex, - StringRef DisableChecksRegex) - : EnableChecks(EnableChecksRegex), DisableChecks(DisableChecksRegex) {} +ChecksFilter::ChecksFilter(const ClangTidyOptions &Options) + : EnableChecks(Options.EnableChecksRegex), + DisableChecks(Options.DisableChecksRegex) {} bool ChecksFilter::isCheckEnabled(StringRef Name) { return EnableChecks.match(Name) && !DisableChecks.match(Name); } ClangTidyContext::ClangTidyContext(SmallVectorImpl *Errors, - StringRef EnableChecksRegex, - StringRef DisableChecksRegex) - : Errors(Errors), DiagEngine(nullptr), - Filter(EnableChecksRegex, DisableChecksRegex) {} + const ClangTidyOptions &Options) + : Errors(Errors), DiagEngine(nullptr), Filter(Options) {} DiagnosticBuilder ClangTidyContext::diag( StringRef CheckName, SourceLocation Loc, StringRef Description, Index: clang-tidy/tool/ClangTidyMain.cpp =================================================================== --- clang-tidy/tool/ClangTidyMain.cpp +++ clang-tidy/tool/ClangTidyMain.cpp @@ -49,18 +49,21 @@ int main(int argc, const char **argv) { CommonOptionsParser OptionsParser(argc, argv, ClangTidyCategory); + clang::tidy::ClangTidyOptions Options; + Options.EnableChecksRegex = Checks; + Options.DisableChecksRegex = DisableChecks; + // FIXME: Allow using --list-checks without positional arguments. if (ListChecks) { llvm::outs() << "Enabled checks:"; - for (auto CheckName : clang::tidy::getCheckNames(Checks, DisableChecks)) + for (auto CheckName : clang::tidy::getCheckNames(Options)) llvm::outs() << "\n " << CheckName; llvm::outs() << "\n\n"; return 0; } SmallVector Errors; - clang::tidy::runClangTidy(Checks, DisableChecks, - OptionsParser.getCompilations(), + clang::tidy::runClangTidy(Options, OptionsParser.getCompilations(), OptionsParser.getSourcePathList(), &Errors); clang::tidy::handleErrors(Errors, Fix); Index: unittests/clang-tidy/ClangTidyTest.h =================================================================== --- unittests/clang-tidy/ClangTidyTest.h +++ unittests/clang-tidy/ClangTidyTest.h @@ -43,7 +43,7 @@ std::string runCheckOnCode(StringRef Code, SmallVectorImpl &Errors) { T Check; - ClangTidyContext Context(&Errors, ".*", ""); + ClangTidyContext Context(&Errors, ClangTidyOptions()); ClangTidyDiagnosticConsumer DiagConsumer(Context); Check.setContext(&Context); std::vector ArgCXX11(1, "-std=c++11"); @@ -59,10 +59,8 @@ return ""; DiagConsumer.finish(); tooling::Replacements Fixes; - for (SmallVector::const_iterator I = Errors.begin(), - E = Errors.end(); - I != E; ++I) - Fixes.insert(I->Fix.begin(), I->Fix.end()); + for (const ClangTidyError &Error : Errors) + Fixes.insert(Error.Fix.begin(), Error.Fix.end()); return tooling::applyAllReplacements(Code, Fixes); }