summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2015-01-21 22:45:52 +0000
committerChris Bieneman <beanz@apple.com>2015-01-21 22:45:52 +0000
commit9e13af7ac377f682d55b3bb3edd3471d247cbd36 (patch)
tree04068061e56256d8ff5321bc39b92059c107b916
parentb16b09b154f2a8468dcfaa9a8eb5297d59cbd7cd (diff)
downloadbcm5719-llvm-9e13af7ac377f682d55b3bb3edd3471d247cbd36.tar.gz
bcm5719-llvm-9e13af7ac377f682d55b3bb3edd3471d247cbd36.zip
Adding a new cl::HideUnrelatedOptions API to allow clang to migrate off cl::getRegisteredOptions.
Summary: cl::getRegisteredOptions really exposes some of the innards of how command line parsing is implemented. Exposing new APIs that allow us to disentangle client code from implementation details will allow us to make more extensive changes to command line parsing. Reviewers: chandlerc, dexonsmith, beanz Reviewed By: dexonsmith Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7100 llvm-svn: 226729
-rw-r--r--llvm/include/llvm/Support/CommandLine.h9
-rw-r--r--llvm/lib/Support/CommandLine.cpp12
-rw-r--r--llvm/unittests/Support/CommandLineTest.cpp11
3 files changed, 31 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/CommandLine.h b/llvm/include/llvm/Support/CommandLine.h
index 1c06bf5f8c0..314dd951b2c 100644
--- a/llvm/include/llvm/Support/CommandLine.h
+++ b/llvm/include/llvm/Support/CommandLine.h
@@ -1889,6 +1889,15 @@ bool ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer,
SmallVectorImpl<const char *> &Argv,
bool MarkEOLs = false);
+/// \brief Mark all options not part of this category as cl::ReallyHidden.
+///
+/// \param Category the category of options to keep displaying
+///
+/// Some tools (like clang-format) like to be able to hide all options that are
+/// not specific to the tool. This function allows a tool to specify a single
+/// option category to display in the -help output.
+void HideUnrelatedOptions(cl::OptionCategory &Category);
+
} // End namespace cl
} // End namespace llvm
diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp
index 40570cab7cc..a774421b26c 100644
--- a/llvm/lib/Support/CommandLine.cpp
+++ b/llvm/lib/Support/CommandLine.cpp
@@ -1826,12 +1826,22 @@ void cl::AddExtraVersionPrinter(void (*func)()) {
void cl::getRegisteredOptions(StringMap<Option *> &Map) {
// Get all the options.
SmallVector<Option *, 4> PositionalOpts; // NOT USED
- SmallVector<Option *, 4> SinkOpts; // NOT USED
+ SmallVector<Option *, 4> SinkOpts; // NOT USED
assert(Map.size() == 0 && "StringMap must be empty");
GetOptionInfo(PositionalOpts, SinkOpts, Map);
return;
}
+void cl::HideUnrelatedOptions(cl::OptionCategory &Category) {
+ StringMap<cl::Option *> Options;
+ cl::getRegisteredOptions(Options);
+ for (auto &I : Options) {
+ if (I.second->Category != &Category && I.first() != "help" &&
+ I.first() != "version")
+ I.second->setHiddenFlag(cl::ReallyHidden);
+ }
+}
+
void LLVMParseCommandLineOptions(int argc, const char *const *argv,
const char *Overview) {
llvm::cl::ParseCommandLineOptions(argc, argv, Overview);
diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp
index ac8d3d8c9d6..0defe6ff370 100644
--- a/llvm/unittests/Support/CommandLineTest.cpp
+++ b/llvm/unittests/Support/CommandLineTest.cpp
@@ -230,5 +230,16 @@ TEST(CommandLineTest, AliasRequired) {
testAliasRequired(array_lengthof(opts2), opts2);
}
+TEST(CommandLineTest, HideUnrelatedOptions) {
+ cl::opt<int> TestOption1("test-option-1");
+ cl::opt<int> TestOption2("test-option-2", cl::cat(TestCategory));
+
+ cl::HideUnrelatedOptions(TestCategory);
+
+ ASSERT_EQ(cl::ReallyHidden, TestOption1.getOptionHiddenFlag())
+ << "Failed to hide extra option.";
+ ASSERT_EQ(cl::NotHidden, TestOption2.getOptionHiddenFlag())
+ << "Hid extra option that should be visable.";
+}
} // anonymous namespace
OpenPOWER on IntegriCloud