Beispiel #1
0
        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());
        }
Beispiel #2
0
 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);
        }
Beispiel #4
0
        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>()));
        }