Index: llvm/include/llvm/Support/CommandLine.h =================================================================== --- llvm/include/llvm/Support/CommandLine.h +++ llvm/include/llvm/Support/CommandLine.h @@ -1968,25 +1968,25 @@ SmallVectorImpl &Argv, bool MarkEOLs = false, bool RelativeNames = false); -/// Mark all options not part of this category as cl::ReallyHidden. +/// Mark all options not part of this category with the given cl::OptionHidden /// -/// \param Category the category of options to keep displaying +/// \param Category the category of options to keep displaying. +/// \param HiddenFlag the flag to apply to all other categories. +/// \param Sub the subcommand to filter the options from. /// /// 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, - SubCommand &Sub = *TopLevelSubCommand); +void HideUnrelatedOptions(cl::OptionCategory &Category); -/// Mark all options not part of the categories as cl::ReallyHidden. +/// Mark all options not part of the categories with the given cl::OptionHidden /// /// \param Categories the categories 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(ArrayRef Categories, - SubCommand &Sub = *TopLevelSubCommand); +void HideUnrelatedOptions(ArrayRef Categories); /// Reset all command line options to a state that looks as if they have /// never appeared on the command line. This is useful for being able to parse Index: llvm/lib/Support/CommandLine.cpp =================================================================== --- llvm/lib/Support/CommandLine.cpp +++ llvm/lib/Support/CommandLine.cpp @@ -2422,22 +2422,21 @@ return GlobalParser->getRegisteredSubcommands(); } -void cl::HideUnrelatedOptions(cl::OptionCategory &Category, SubCommand &Sub) { - for (auto &I : Sub.OptionsMap) { +void cl::HideUnrelatedOptions(cl::OptionCategory &Category) { + for (auto &I : TopLevelSubCommand->OptionsMap) { for (auto &Cat : I.second->Categories) { if (Cat != &Category && Cat != &GenericCategory) - I.second->setHiddenFlag(cl::ReallyHidden); + I.second->setHiddenFlag(ReallyHidden); } } } -void cl::HideUnrelatedOptions(ArrayRef Categories, - SubCommand &Sub) { - for (auto &I : Sub.OptionsMap) { +void cl::HideUnrelatedOptions(ArrayRef Categories) { + for (auto &I : TopLevelSubCommand->OptionsMap) { for (auto &Cat : I.second->Categories) { if (find(Categories, Cat) == Categories.end() && Cat != &GenericCategory) - I.second->setHiddenFlag(cl::ReallyHidden); + I.second->setHiddenFlag(ReallyHidden); } } } Index: llvm/unittests/Support/CommandLineTest.cpp =================================================================== --- llvm/unittests/Support/CommandLineTest.cpp +++ llvm/unittests/Support/CommandLineTest.cpp @@ -383,12 +383,12 @@ ASSERT_EQ(cl::ReallyHidden, TestOption1.getOptionHiddenFlag()) << "Failed to hide extra option."; ASSERT_EQ(cl::NotHidden, TestOption2.getOptionHiddenFlag()) - << "Hid extra option that should be visable."; + << "Hid extra option that should be visible."; StringMap &Map = cl::getRegisteredOptions(*cl::TopLevelSubCommand); ASSERT_EQ(cl::NotHidden, Map["help"]->getOptionHiddenFlag()) - << "Hid default option that should be visable."; + << "Hid default option that should be visible."; } cl::OptionCategory TestCategory2("Test Options set 2", "Description"); @@ -406,14 +406,14 @@ ASSERT_EQ(cl::ReallyHidden, TestOption1.getOptionHiddenFlag()) << "Failed to hide extra option."; ASSERT_EQ(cl::NotHidden, TestOption2.getOptionHiddenFlag()) - << "Hid extra option that should be visable."; + << "Hid extra option that should be visible."; ASSERT_EQ(cl::NotHidden, TestOption3.getOptionHiddenFlag()) - << "Hid extra option that should be visable."; + << "Hid extra option that should be visible."; StringMap &Map = cl::getRegisteredOptions(*cl::TopLevelSubCommand); ASSERT_EQ(cl::NotHidden, Map["help"]->getOptionHiddenFlag()) - << "Hid default option that should be visable."; + << "Hid default option that should be visible."; } TEST(CommandLineTest, SetValueInSubcategories) {