Added the ability to hide CommandOptions. (#642)

CommandOptions now has an IsHidden property that, when set to true, will cause the option to be hidden from the following cases:

- Help text using `-h|--help`
- Xml representations generated with the `cli xml` command
- Diagnostics displayed with the `cli explain` command

Hidden options can still be outputted with `cli explain` using the `--hidden` option that is also used to display hidden commands.

Fixes #631
This commit is contained in:
Tim Waalewijn
2021-11-29 23:16:54 +01:00
committed by GitHub
parent 168f35202d
commit 2e5d18fa78
15 changed files with 138 additions and 7 deletions

View File

@ -34,6 +34,11 @@ namespace Spectre.Console.Cli
/// </summary>
public bool ValueIsOptional { get; }
/// <summary>
/// Gets or sets a value indicating whether this option is hidden from the help text.
/// </summary>
public bool IsHidden { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="CommandOptionAttribute"/> class.
/// </summary>

View File

@ -36,7 +36,7 @@ namespace Spectre.Console.Cli
[CommandOption("-d|--detailed")]
public bool? Detailed { get; }
[Description("Include hidden commands.")]
[Description("Include hidden commands and options.")]
[CommandOption("--hidden")]
public bool IncludeHidden { get; }
}
@ -166,7 +166,7 @@ namespace Spectre.Console.Cli
var parametersNode = commandNode.AddNode(ParentMarkup("Parameters"));
foreach (var parameter in command.Parameters)
{
AddParameter(parametersNode, parameter, detailed);
AddParameter(parametersNode, parameter, detailed, includeHidden);
}
}
@ -181,8 +181,13 @@ namespace Spectre.Console.Cli
}
}
private void AddParameter(TreeNode parametersNode, CommandParameter parameter, bool detailed)
private void AddParameter(TreeNode parametersNode, CommandParameter parameter, bool detailed, bool includeHidden)
{
if (!includeHidden && parameter.IsHidden)
{
return;
}
if (!detailed)
{
parametersNode.AddNode(

View File

@ -153,6 +153,7 @@ namespace Spectre.Console.Cli
// Options
foreach (var option in command.Parameters.OfType<CommandOption>()
.Where(x => !x.IsHidden)
.OrderBy(x => string.Join(",", x.LongNames))
.ThenBy(x => string.Join(",", x.ShortNames)))
{

View File

@ -61,7 +61,7 @@ namespace Spectre.Console.Cli
parameters.Add(new HelpOption("v", "version", null, null, "Prints version information"));
}
parameters.AddRange(command?.Parameters?.OfType<CommandOption>()?.Select(o =>
parameters.AddRange(command?.Parameters.OfType<CommandOption>().Where(o => !o.IsHidden).Select(o =>
new HelpOption(
o.ShortNames.FirstOrDefault(), o.LongNames.FirstOrDefault(),
o.ValueName, o.ValueIsOptional, o.Description))

View File

@ -16,7 +16,7 @@ namespace Spectre.Console.Cli
CommandArgumentAttribute argument, ParameterValueProviderAttribute? valueProvider,
IEnumerable<ParameterValidationAttribute> validators)
: base(parameterType, parameterKind, property, description, converter, defaultValue,
null, valueProvider, validators, argument.IsRequired)
null, valueProvider, validators, argument.IsRequired, false)
{
Value = argument.ValueName;
Position = argument.Position;

View File

@ -20,7 +20,7 @@ namespace Spectre.Console.Cli
IEnumerable<ParameterValidationAttribute> validators,
DefaultValueAttribute? defaultValue, bool valueIsOptional)
: base(parameterType, parameterKind, property, description, converter,
defaultValue, deconstructor, valueProvider, validators, false)
defaultValue, deconstructor, valueProvider, validators, false, optionAttribute.IsHidden)
{
LongNames = optionAttribute.LongNames;
ShortNames = optionAttribute.ShortNames;

View File

@ -19,6 +19,7 @@ namespace Spectre.Console.Cli
public List<ParameterValidationAttribute> Validators { get; }
public ParameterValueProviderAttribute? ValueProvider { get; }
public bool Required { get; set; }
public bool IsHidden { get; }
public string PropertyName => Property.Name;
public virtual bool WantRawValue => ParameterType.IsPairDeconstructable()
@ -30,7 +31,7 @@ namespace Spectre.Console.Cli
DefaultValueAttribute? defaultValue,
PairDeconstructorAttribute? deconstructor,
ParameterValueProviderAttribute? valueProvider,
IEnumerable<ParameterValidationAttribute> validators, bool required)
IEnumerable<ParameterValidationAttribute> validators, bool required, bool isHidden)
{
Id = Guid.NewGuid();
ParameterType = parameterType;
@ -43,6 +44,7 @@ namespace Spectre.Console.Cli
ValueProvider = valueProvider;
Validators = new List<ParameterValidationAttribute>(validators ?? Array.Empty<ParameterValidationAttribute>());
Required = required;
IsHidden = isHidden;
}
public bool IsFlagValue()