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); }
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); }
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(); } } }