private string CreateUsageCommandOptionsAndArgs(CommandDescriptor command) { var sb = new StringBuilder(); sb.Append(_applicationMetadataProvider.GetExecutableName()); if (!command.IsPrimaryCommand) { sb.Append(" "); sb.Append(command.Name); } if (command.Options.Any(x => !x.IsHidden)) { foreach (var opt in command.Options.Where(x => !x.IsHidden)) { sb.Append(" "); if (opt.OptionType == typeof(bool)) { if (opt.DefaultValue.HasValue && opt.DefaultValue.Value.Equals(true)) { sb.Append($"[--{opt.Name}=<true|false>]"); } else { sb.Append($"[--{opt.Name}]"); } } else if (DynamicListHelper.IsArrayOrEnumerableLike(opt.OptionType)) { sb.Append($"[--{opt.Name} <{opt.ValueName}>...]"); } else { sb.Append($"[--{opt.Name} <{opt.ValueName}>]"); } } } if (command.Arguments.Any()) { foreach (var arg in command.Arguments) { sb.Append(" "); if (arg.IsEnumerableLike) { sb.Append($"{arg.Name}0 ... {arg.Name}N"); } else { sb.Append(arg.Name); } } } return(sb.ToString()); }
private string BuildParameterLabel(CommandOptionDescriptor option) { return((option.ShortName.Any() ? string.Join(", ", option.ShortName.Select(x => $"-{x}")) + ", " : "") + $"--{option.Name}" + ( option.OptionType == typeof(bool) ? option.DefaultValue.HasValue && option.DefaultValue.Value.Equals(true) ? "=<true|false>" : "" : DynamicListHelper.IsArrayOrEnumerableLike(option.OptionType) ? $" <{option.ValueName}>..." : $" <{option.ValueName}>" )); }
private object?CreateValue(Type valueType, string?[] values, CommandOptionDescriptor?option, CommandArgumentDescriptor?argument) { if (DynamicListHelper.TryCreateArrayOrEnumerableLike(valueType, values, _valueConverter, out var arrayOrEnumerableLike)) { // T[] or List<T> (IEnumerable<T>, IList<T>) return(arrayOrEnumerableLike); } else if (!DynamicListHelper.IsArrayOrEnumerableLike(valueType)) { // Primitive or plain object (int, bool, string ...) var value = values[values.Length - 1]; if (value == null) { throw new ParameterBinderException(ParameterBinderResult.InsufficientOptionValue, option, argument); } return((option != null) ? ConvertTo(option !, valueType, value) : ConvertTo(argument !, valueType, value)); } throw new ParameterBinderException(ParameterBinderResult.TypeNotSupported, $"Cannot create a instance of type '{valueType.FullName}'", option, argument); }
private CommandOptionDescriptor CreateCommandOption(Type optionType, string name, IReadOnlyList <char> shortName, string description, CoconaDefaultValue defaultValue, CommandOptionFlags flags = CommandOptionFlags.None) { var optionValueName = (DynamicListHelper.IsArrayOrEnumerableLike(optionType) ? DynamicListHelper.GetElementType(optionType) : optionType).Name; return(new CommandOptionDescriptor(optionType, name, shortName, description, defaultValue, optionValueName, flags, Array.Empty <Attribute>())); }