private static CommandLineBuilder UseParseErrorReporting(this CommandLineBuilder builder, string commandName) { builder.AddMiddleware(async(context, next) => { CommandResult currentCommandResult = context.ParseResult.CommandResult; while (currentCommandResult != null && currentCommandResult.Command.Name != commandName) { currentCommandResult = currentCommandResult.Parent as CommandResult; } if (currentCommandResult == null || !context.ParseResult.Errors.Any()) { //different command was launched or no errors await next(context).ConfigureAwait(false); } else { context.ExitCode = 127; //parse error //TODO: discuss to make coloring extensions public //context.Console.ResetTerminalForegroundColor(); //context.Console.SetTerminalForegroundRed(); foreach (var error in context.ParseResult.Errors) { context.Console.Error.WriteLine(error.Message); } context.Console.Error.WriteLine(); //context.Console.ResetTerminalForegroundColor(); var output = context.Console.Out.CreateTextWriter(); var helpContext = new HelpContext(context.HelpBuilder, context.ParseResult.CommandResult.Command, output, context.ParseResult); context.HelpBuilder .Write(helpContext); } }, MiddlewareOrder.ErrorReporting); return(builder); }
protected override void VisitCommandResult(CommandResult commandResult) { CommandResults.Add(commandResult.Command, commandResult); }