diff options
| author | Alexander Kornienko <alexfh@google.com> | 2015-08-17 10:03:27 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2015-08-17 10:03:27 +0000 |
| commit | 65eccb463df7fe511c813ee6a1794c80d7489ff2 (patch) | |
| tree | c77a354b72c9e449bb8263bdac952fa521f0b7e0 | |
| parent | 3474b5585842797caee420af1c41f14c26aa01c5 (diff) | |
| download | bcm5719-llvm-65eccb463df7fe511c813ee6a1794c80d7489ff2.tar.gz bcm5719-llvm-65eccb463df7fe511c813ee6a1794c80d7489ff2.zip | |
[clang-tidy] Allow use of -list-checks option without need to pass source files.
Initialize CommonOptionsParser with ZeroOrOne NumOccurrenceFlag so callers can
pass -list-checks without the need to pass additional positional parameters,
then add dummy file if none were supplied.
http://reviews.llvm.org/D12070
Patch by Don Hinton!
llvm-svn: 245205
| -rw-r--r-- | clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp | 23 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/validate-check-names.cpp | 2 |
2 files changed, 18 insertions, 7 deletions
diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index 0ec59934f97..7eb13352286 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -262,17 +262,21 @@ static std::unique_ptr<ClangTidyOptionsProvider> createOptionsProvider() { } static int clangTidyMain(int argc, const char **argv) { - CommonOptionsParser OptionsParser(argc, argv, ClangTidyCategory); + CommonOptionsParser OptionsParser(argc, argv, ClangTidyCategory, + cl::ZeroOrMore); auto OptionsProvider = createOptionsProvider(); if (!OptionsProvider) return 1; - std::string FileName = OptionsParser.getSourcePathList().front(); + StringRef FileName("dummy"); + auto PathList = OptionsParser.getSourcePathList(); + if (!PathList.empty()) { + FileName = OptionsParser.getSourcePathList().front(); + } ClangTidyOptions EffectiveOptions = OptionsProvider->getOptions(FileName); std::vector<std::string> EnabledChecks = getCheckNames(EffectiveOptions); - // FIXME: Allow using --list-checks without positional arguments. if (ListChecks) { llvm::outs() << "Enabled checks:"; for (auto CheckName : EnabledChecks) @@ -283,8 +287,9 @@ static int clangTidyMain(int argc, const char **argv) { if (DumpConfig) { EffectiveOptions.CheckOptions = getCheckOptions(EffectiveOptions); - llvm::outs() << configurationAsText(ClangTidyOptions::getDefaults() - .mergeWith(EffectiveOptions)) + llvm::outs() << configurationAsText( + ClangTidyOptions::getDefaults().mergeWith( + EffectiveOptions)) << "\n"; return 0; } @@ -295,12 +300,18 @@ static int clangTidyMain(int argc, const char **argv) { return 1; } + if (PathList.empty()) { + llvm::errs() << "Error: no input files specified.\n"; + llvm::cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); + return 1; + } + ProfileData Profile; std::vector<ClangTidyError> Errors; ClangTidyStats Stats = runClangTidy(std::move(OptionsProvider), OptionsParser.getCompilations(), - OptionsParser.getSourcePathList(), &Errors, + PathList, &Errors, EnableCheckProfile ? &Profile : nullptr); bool FoundErrors = std::find_if(Errors.begin(), Errors.end(), [](const ClangTidyError &E) { diff --git a/clang-tools-extra/test/clang-tidy/validate-check-names.cpp b/clang-tools-extra/test/clang-tidy/validate-check-names.cpp index 709d9deb20d..35bfb09de8e 100644 --- a/clang-tools-extra/test/clang-tidy/validate-check-names.cpp +++ b/clang-tools-extra/test/clang-tidy/validate-check-names.cpp @@ -1,2 +1,2 @@ // Check names may only contain alphanumeric characters, '-', '_', and '.'. -// RUN: clang-tidy -checks=* -list-checks - -- | grep '^ ' | cut -b5- | not grep -v '^[a-zA-Z0-9_.\-]\+$' +// RUN: clang-tidy -checks=* -list-checks | grep '^ ' | cut -b5- | not grep -v '^[a-zA-Z0-9_.\-]\+$' |

