Move Spectre.Console.Cli to it's own package

This commit is contained in:
Patrik Svensson
2022-05-14 22:56:36 +02:00
committed by Patrik Svensson
parent b600832e00
commit 36ca22ffac
262 changed files with 736 additions and 48 deletions

View File

@ -0,0 +1,48 @@
namespace Spectre.Console.Cli;
internal static class CommandLineParseExceptionFactory
{
internal static CommandParseException Create(string arguments, CommandTreeToken token, string message, string details)
{
return new CommandParseException(message, CreatePrettyMessage(arguments, token, message, details));
}
internal static CommandParseException Create(IEnumerable<string> arguments, CommandTreeToken token, string message, string details)
{
return new CommandParseException(message, CreatePrettyMessage(string.Join(" ", arguments), token, message, details));
}
private static IRenderable CreatePrettyMessage(string arguments, CommandTreeToken token, string message, string details)
{
var composer = new Composer();
var position = token?.Position ?? 0;
var value = token?.Representation ?? arguments;
// Header
composer.LineBreak();
composer.Style("red", "Error:");
composer.Space().Text(message.EscapeMarkup());
composer.LineBreak();
// Template
composer.LineBreak();
composer.Spaces(7).Text(arguments.EscapeMarkup());
// Error
composer.LineBreak();
composer.Spaces(7).Spaces(position);
composer.Style("red", error =>
{
error.Repeat('^', value.Length);
error.Space();
error.Text(details.TrimEnd('.').EscapeMarkup());
error.LineBreak();
});
composer.LineBreak();
return composer;
}
}

View File

@ -0,0 +1,54 @@
namespace Spectre.Console.Cli;
internal static class CommandLineTemplateExceptionFactory
{
internal static CommandTemplateException Create(string template, TemplateToken? token, string message, string details)
{
return new CommandTemplateException(message, template, CreatePrettyMessage(template, token, message, details));
}
private static IRenderable CreatePrettyMessage(string template, TemplateToken? token, string message, string details)
{
var composer = new Composer();
var position = token?.Position ?? 0;
var value = token?.Representation ?? template;
// Header
composer.LineBreak();
composer.Style("red", "Error:");
composer.Space().Text("An error occured when parsing template.");
composer.LineBreak();
composer.Spaces(7).Style("yellow", message.EscapeMarkup());
composer.LineBreak();
if (string.IsNullOrWhiteSpace(template))
{
// Error
composer.LineBreak();
composer.Style("red", message.EscapeMarkup());
composer.LineBreak();
}
else
{
// Template
composer.LineBreak();
composer.Spaces(7).Text(template.EscapeMarkup());
// Error
composer.LineBreak();
composer.Spaces(7).Spaces(position);
composer.Style("red", error =>
{
error.Repeat('^', value.Length);
error.Space();
error.Text(details.TrimEnd('.').EscapeMarkup());
error.LineBreak();
});
}
composer.LineBreak();
return composer;
}
}