Exemplo n.º 1
0
Arquivo: Parser.cs Projeto: nohwnd/sdk
        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);
        }
Exemplo n.º 2
0
 protected override void VisitCommandResult(CommandResult commandResult)
 {
     CommandResults.Add(commandResult.Command, commandResult);
 }