mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
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
This commit is contained in:
parent
b377a5e42b
commit
4455c9a3b0
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user