commandline: After customizing help generation, hep VERB does not work
Did this
static async Task Main( string[] args )
{
_logger.Info(CommandLine.Text.HeadingInfo.Default);
var parser = new Parser(p => { p.AutoVersion = false; p.CaseInsensitiveEnumValues = true; });
var parserResult = parser.ParseArguments<SyncOptions, QueryOptions, TokenOptions>(args);
await parserResult.MapResult(
(SyncOptions opts) => SyncAsync(opts),
(QueryOptions opts) => QueryAsync(opts),
(TokenOptions opts) => ShowTokenAsync(opts),
errors => Task.FromResult(DisplayHelp(parserResult, errors))
)
.ContinueWith(t => {
if ( System.Diagnostics.Debugger.IsAttached )
{
Console.WriteLine("Press enter...");
Console.ReadLine();
}
});
}
private static int DisplayHelp<T>( ParserResult<T> result, IEnumerable<Error> errs )
{
var helpText = CommandLine.Text.HelpText.AutoBuild(result, h =>
{
h.AdditionalNewLineAfterOption = false;
h.AddNewLineBetweenHelpSections = true;
h.AddEnumValuesToHelpText = true;
h.AutoVersion = false;
h.Heading = CommandLine.Text.HeadingInfo.Empty;
h.MaximumDisplayWidth = 110;
h.AddVerbs(typeof(SyncOptions), typeof(QueryOptions), typeof(TokenOptions));
return CommandLine.Text.HelpText.DefaultParsingErrorsHandler(result, h);
}, e => e,
true);
Console.WriteLine(helpText);
return 1;
}
Before this I could type MyProgram help VERB and it would tell me the same as MyProgram VERB minus errors section. Now this gives me only verb list, like if help lost its first argument. This does not work either: MyProgram VERB help but this does: MyProgram VERB --help.
Am I doing something wrong here?
About this issue
- Original URL
- State: open
- Created 4 years ago
- Comments: 16
Upgrade your example to the latest version (2.8+) and change your helptext class for the following and it should work
@DkAngelito Thank You!
This one line was what was throwing me off and I was banging my head on my keyboard. The overload with this should be marked obsolete and/or killed with fire. What a headache!
Hi @Tsaukpaetra
You need to change the
return HelpText.DefaultParsingErrorsHandler(result, h);to justreturn h;as the AutoBuild will already call this method internally.