private static IRenderable CreatePrettyMessage(string arguments, CommandTreeToken token, string message, string details)
        {
            var composer = new RenderableComposer();

            var position = token?.Position ?? 0;
            var value    = token?.Representation ?? arguments;

            // Header
            composer.LineBreak();
            composer.Color(ConsoleColor.Red, error => error.Text("Error:"));
            composer.Space().Text(message);
            composer.LineBreak();

            // Template
            composer.LineBreak();
            composer.Spaces(7).Text(arguments);

            // Error
            composer.LineBreak();
            composer.Spaces(7).Spaces(position);
            composer.Color(ConsoleColor.Red, error =>
            {
                error.Repeat('^', value.Length);
                error.Text($" {details.TrimEnd('.')}");
                error.LineBreak();
            });

            composer.LineBreak();

            return(composer);
        }
示例#2
0
        private static void WriteArguments(RenderableComposer composer, CommandInfo command)
        {
            var arguments = new List <HelpArgument>();

            arguments.AddRange(command?.Parameters?.OfType <CommandArgument>()?.Select(
                                   x => new HelpArgument(x.Value, x.Required, x.Description))
                               ?? Array.Empty <HelpArgument>());

            if (arguments.Count == 0)
            {
                return;
            }

            composer.Color(ConsoleColor.Yellow, c => c.Text("ARGUMENTS:")).LineBreak();

            var maxLength = arguments.Max(arg => arg.Name.Length);

            foreach (var argument in arguments)
            {
                composer.Tab();

                // Argument name.
                composer.Condition(argument.Required,
                                   @true: c1 => c1.Color(ConsoleColor.Gray, c => c.Text($"<{argument.Name}>")),
                                   @false: c1 => c1.Color(ConsoleColor.Gray, c => c.Text($"[{argument.Name}]")));

                // Description
                composer.Spaces(maxLength - argument.Name.Length);
                composer.Tab().Text(argument.Description?.TrimEnd('.')?.Trim());

                composer.LineBreak();
            }

            composer.LineBreak();
        }
        private static IRenderable CreatePrettyMessage(string template, TemplateToken?token, string message, string details)
        {
            var composer = new RenderableComposer();

            var position = token?.Position ?? 0;
            var value    = token?.Representation ?? template;

            // Header
            composer.LineBreak();
            composer.Color(ConsoleColor.Red, error => error.Text("Error:"));
            composer.Space().Text("An error occured when parsing template.");
            composer.LineBreak();
            composer.Spaces(7).Color(ConsoleColor.Yellow, error => error.Text(message));
            composer.LineBreak();

            if (string.IsNullOrWhiteSpace(template))
            {
                // Error
                composer.LineBreak();
                composer.Color(ConsoleColor.Red, error => error.Text(message));
                composer.LineBreak();
            }
            else
            {
                // Template
                composer.LineBreak();
                composer.Spaces(7).Text(template);

                // Error
                composer.LineBreak();
                composer.Spaces(7).Spaces(position);
                composer.Color(ConsoleColor.Red, error =>
                {
                    error.Repeat('^', value.Length);
                    error.Text($" {details.TrimEnd('.')}");
                    error.LineBreak();
                });
            }

            composer.LineBreak();

            return(composer);
        }
示例#4
0
        private static void WriteCommands(
            RenderableComposer composer,
            CommandModel model,
            ICommandContainer command,
            bool isDefaultCommand)
        {
            var commands = isDefaultCommand ? model.Commands : command.Commands;

            if (commands.Count > 0)
            {
                composer.Color(ConsoleColor.Yellow, c => c.Text("COMMANDS:")).LineBreak();
                var maxCommandLength = commands.Max(x => x.Name.Length);
                foreach (var child in commands)
                {
                    composer.Tab().Text(child.Name);
                    composer.Spaces(maxCommandLength - child.Name.Length);
                    composer.Tab().Text(child.Description?.TrimEnd('.') ?? string.Empty);
                    composer.LineBreak();
                }
            }
        }