/// than just handing around a global list.
StringMap<Option *> &getRegisteredOptions(SubCommand &Sub = *TopLevelSubCommand);
-/// \brief Use this to get all registered SubCommands from the provided parser.
-///
-/// \return A range of all SubCommand pointers registered with the parser.
-///
-/// Typical usage:
-/// \code
-/// main(int argc, char* argv[]) {
-/// llvm::cl::ParseCommandLineOptions(argc, argv);
-/// for (auto* S : llvm::cl::getRegisteredSubcommands()) {
-/// if (*S) {
-/// std::cout << "Executing subcommand: " << S->getName() << std::endl;
-/// // Execute some function based on the name...
-/// }
-/// }
-/// }
-/// \endcode
-///
-/// This interface is useful for defining subcommands in libraries and
-/// the dispatch from a single point (like in the main function).
-iterator_range<typename SmallPtrSet<SubCommand *, 4>::iterator>
-getRegisteredSubcommands();
-
//===----------------------------------------------------------------------===//
// Standalone command line processing utilities.
//
RegisteredSubCommands.erase(sub);
}
- iterator_range<typename SmallPtrSet<SubCommand *, 4>::iterator>
- getRegisteredSubcommands() {
- return make_range(RegisteredSubCommands.begin(),
- RegisteredSubCommands.end());
- }
-
void reset() {
ActiveSubCommand = nullptr;
ProgramName.clear();
return Sub.OptionsMap;
}
-iterator_range<typename SmallPtrSet<SubCommand *, 4>::iterator>
-cl::getRegisteredSubcommands() {
- return GlobalParser->getRegisteredSubcommands();
-}
-
void cl::HideUnrelatedOptions(cl::OptionCategory &Category, SubCommand &Sub) {
for (auto &I : Sub.OptionsMap) {
if (I.second->Category != &Category &&
EXPECT_FALSE(cl::ParseCommandLineOptions(3, args2, nullptr, true));
}
-TEST(CommandLineTest, GetRegisteredSubcommands) {
- cl::ResetCommandLineParser();
-
- StackSubCommand SC1("sc1", "First Subcommand");
- StackSubCommand SC2("sc2", "Second subcommand");
-
- const char *args0[] = {"prog", "sc1"};
- const char *args1[] = {"prog", "sc2"};
-
- EXPECT_TRUE(cl::ParseCommandLineOptions(2, args0, nullptr, true));
- for (auto *S : cl::getRegisteredSubcommands()) {
- if (*S)
- EXPECT_STREQ("sc1", S->getName());
- }
-
- cl::ResetAllOptionOccurrences();
- EXPECT_TRUE(cl::ParseCommandLineOptions(2, args1, nullptr, true));
- for (auto *S : cl::getRegisteredSubcommands()) {
- if (*S)
- EXPECT_STREQ("sc2", S->getName());
- }
-}
-
} // anonymous namespace