[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