in src/build/Program.cs [50:146]
static Task HandleErrorsAndShowHelp(ParserResult<object> parserResult, Type[] commands)
{
SentenceBuilder.Factory = () => new TweakedSentenceBuilder();
using var parser = new Parser(cfg =>
{
cfg.IgnoreUnknownArguments = true;
cfg.AutoHelp = false;
cfg.AutoVersion = false;
cfg.HelpWriter = null;
});
var result = parser.ParseArguments<GlobalOptions>(string.Empty.Split(' '));
var htGlobals = new HelpText(
"ElastiBuild " + ProductVersion,
$"Copyright (c) {DateTime.Now.Year}, https://elastic.co")
{
AdditionalNewLineAfterOption = false,
AutoHelp = false,
AutoVersion = false,
AddDashesToOption = true
};
htGlobals.AddPreOptionsLine(Environment.NewLine + "Global Flags:");
htGlobals.AddOptions(result);
Console.WriteLine(htGlobals.ToString());
bool isGlobalHelp = parserResult.TypeInfo.Current == typeof(NullInstance);
if (isGlobalHelp)
{
var htVerbs = new HelpText
{
AddDashesToOption = false,
AutoHelp = false,
AutoVersion = false,
AdditionalNewLineAfterOption = false,
};
htVerbs.AddPreOptionsLine("Available Commands:");
htVerbs.AddVerbs(commands);
Console.WriteLine(htVerbs.ToString());
}
var htOptions = new HelpText(string.Empty, string.Empty)
{
AddDashesToOption = true,
AutoHelp = false,
AutoVersion = false
};
string text = string.Empty;
if (!isGlobalHelp)
{
htOptions.AddOptions(parserResult);
text = htOptions.ToString();
if (text.Length > 0)
{
var cmdName = parserResult
.TypeInfo.Current
.GetCustomAttributes(typeof(VerbAttribute), true)
.Cast<VerbAttribute>()
.FirstOrDefault()
?.Name ?? throw new Exception("Something went horribly wrong. Command name is empty.");
Console.WriteLine(
$"{cmdName.ToUpper()} Flags:" + text);
}
text = HelpText.RenderUsageText(parserResult);
if (text.Length > 0)
{
Console.WriteLine(
"Usage Examples:" +
Environment.NewLine +
text +
Environment.NewLine);
}
};
var tsb = SentenceBuilder.Factory();
text =
HelpText.RenderParsingErrorsText(
parserResult,
err => tsb.FormatError(err),
mex => tsb.FormatMutuallyExclusiveSetErrors(mex),
2);
if (text.Length > 0)
Console.WriteLine("Error(s):" + Environment.NewLine + text);
return Task.CompletedTask;
}