[PATCH] Putting all the standard tool options into a "Generic" category.
Duncan P. N. Exon Smith
dexonsmith at apple.com
Fri Jan 23 16:33:52 PST 2015
> On 2015-Jan-23, at 11:20, Chris Bieneman <beanz at apple.com> wrote:
>
> Hi dexonsmith, chandlerc, majnemer,
>
> This puts all the options that CommandLine.cpp implements into a category so that the APIs to hide options can not hide based on the generic category instead of string matching a partial list of argument strings.
>
> This patch is pretty simple and straight forward but it does impact the -help output of all tools using cl::opt. Specifically the options implemented in CommandLine.cpp (help, help-list, help-hidden, help-list-hidden, print-options, print-all-options, version) are all grouped together into an Option category, and these options are never hidden by the cl::HideUnrelatedOptions API.
>
> http://reviews.llvm.org/D7150
>
> Files:
> lib/Support/CommandLine.cpp
>
> Index: lib/Support/CommandLine.cpp
> ===================================================================
> --- lib/Support/CommandLine.cpp
> +++ lib/Support/CommandLine.cpp
> @@ -1653,39 +1653,45 @@
> static HelpPrinterWrapper WrappedHiddenPrinter(UncategorizedHiddenPrinter,
> CategorizedHiddenPrinter);
>
> +// Define a category for generic options that all tools should have.
> +static cl::OptionCategory GenericCategory("Generic Options");
> +
> // Define uncategorized help printers.
> // -help-list is hidden by default because if Option categories are being used
> // then -help behaves the same as -help-list.
> static cl::opt<HelpPrinter, true, parser<bool>> HLOp(
> "help-list",
> cl::desc("Display list of available options (-help-list-hidden for more)"),
> - cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed);
> + cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed,
> + cl::cat(GenericCategory));
>
> static cl::opt<HelpPrinter, true, parser<bool>>
> HLHOp("help-list-hidden", cl::desc("Display list of all available options"),
> cl::location(UncategorizedHiddenPrinter), cl::Hidden,
> - cl::ValueDisallowed);
> + cl::ValueDisallowed, cl::cat(GenericCategory));
>
> // Define uncategorized/categorized help printers. These printers change their
> // behaviour at runtime depending on whether one or more Option categories have
> // been declared.
> static cl::opt<HelpPrinterWrapper, true, parser<bool>>
> HOp("help", cl::desc("Display available options (-help-hidden for more)"),
> - cl::location(WrappedNormalPrinter), cl::ValueDisallowed);
> + cl::location(WrappedNormalPrinter), cl::ValueDisallowed,
> + cl::cat(GenericCategory));
>
> static cl::opt<HelpPrinterWrapper, true, parser<bool>>
> HHOp("help-hidden", cl::desc("Display all available options"),
> - cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed);
> + cl::location(WrappedHiddenPrinter), cl::Hidden, cl::ValueDisallowed,
> + cl::cat(GenericCategory));
>
> static cl::opt<bool> PrintOptions(
> "print-options",
> cl::desc("Print non-default options after command line parsing"),
> - cl::Hidden, cl::init(false));
> + cl::Hidden, cl::init(false), cl::cat(GenericCategory));
>
> static cl::opt<bool> PrintAllOptions(
> "print-all-options",
> cl::desc("Print all option values after command line parsing"), cl::Hidden,
> - cl::init(false));
> + cl::init(false), cl::cat(GenericCategory));
>
> void HelpPrinterWrapper::operator=(bool Value) {
> if (Value == false)
> @@ -1790,7 +1796,8 @@
>
> static cl::opt<VersionPrinter, true, parser<bool>>
> VersOp("version", cl::desc("Display the version of this program"),
> - cl::location(VersionPrinterInstance), cl::ValueDisallowed);
> + cl::location(VersionPrinterInstance), cl::ValueDisallowed,
> + cl::cat(GenericCategory));
>
> // Utility function for printing the help message.
> void cl::PrintHelpMessage(bool Hidden, bool Categorized) {
> @@ -1836,8 +1843,8 @@
> StringMap<cl::Option *> Options;
> cl::getRegisteredOptions(Options);
> for (auto &I : Options) {
> - if (I.second->Category != &Category && I.first() != "help" &&
> - I.first() != "version")
> + if (I.second->Category != &Category &&
> + I.second->Category != &GenericCategory)
> I.second->setHiddenFlag(cl::ReallyHidden);
> }
> }
Is this possible to test? Otherwise, LGTM.
More information about the llvm-commits
mailing list