mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-07-01 18:38:16 +08:00
Move Spectre.Console.Cli to it's own package
This commit is contained in:

committed by
Patrik Svensson

parent
b600832e00
commit
36ca22ffac
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user