public static void Main([NotNull] string[] args) { Assert.ArgumentNotNull(args, "args"); CoreApp.InitializeLogging(); CoreApp.LogMainInfo(); Analytics.Start(); var filteredArgs = args.ToList(); var query = GetQueryAndFilterArgs(filteredArgs); var wait = GetWaitAndFilterArgs(filteredArgs); var parser = new Parser(with => with.HelpWriter = Console.Error); Assert.IsNotNull(parser, "parser"); var options = new MainCommandGroup(); EnsureAutoCompeteForCommands(options); if (!parser.ParseArguments(filteredArgs.ToArray(), options, delegate { })) { Console.WriteLine("Note, commands provide output when work is done i.e. without any progress indication."); Console.WriteLine("\r\n --query\t When specified, allows returning only part of any command's output"); Console.WriteLine("\r\n --data\t When specified, allows returning only 'data' part of any command's output"); Console.WriteLine("\r\n --wait\t When specified, waits for keyboard input before terminating"); Environment.Exit(Parser.DefaultExitCodeFail); } var result = options.SelectedCommand.Execute(); result = QueryResult(result, query); if (result == null) { return; } var serializer = new JsonSerializer { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented, }; serializer.Converters.Add(new DirectoryInfoConverter()); var writer = Console.Out; serializer.Serialize(writer, result); if (wait) { Console.ReadKey(); } }
private static void EnsureAutoCompeteForCommands(MainCommandGroup options) { foreach (var propertyInfo in options.GetType().GetProperties()) { if (typeof(ICommand).IsAssignableFrom(propertyInfo.PropertyType)) { var verb = propertyInfo.GetCustomAttributes().OfType<VerbOptionAttribute>().FirstOrDefault(); if (verb == null) { continue; } var command = verb.LongName; if (File.Exists(command)) { continue; } File.Create(command).Close(); } } }