diff --git a/src/CommandLine/Parser.cs b/src/CommandLine/Parser.cs
index a1c5cbdf..2d288f9a 100644
--- a/src/CommandLine/Parser.cs
+++ b/src/CommandLine/Parser.cs
@@ -183,7 +183,7 @@ private static Result<IEnumerable<Token>, Error> Tokenize(
settings.EnableDashDash)(arguments, optionSpecs);
}
- private static ParserResult<T> MakeParserResult<T>(ParserResult<T> parserResult, ParserSettings settings)
+ private /*static*/ ParserResult<T> MakeParserResult<T>(ParserResult<T> parserResult, ParserSettings settings)
{
return DisplayHelp(
parserResult,
@@ -191,12 +191,12 @@ private static ParserResult<T> MakeParserResult<T>(ParserResult<T> parserResult,
settings.MaximumDisplayWidth);
}
- private static ParserResult<T> DisplayHelp<T>(ParserResult<T> parserResult, TextWriter helpWriter, int maxDisplayWidth)
+ private /*static*/ ParserResult<T> DisplayHelp<T>(ParserResult<T> parserResult, TextWriter helpWriter, int maxDisplayWidth)
{
parserResult.WithNotParsed(
errors =>
Maybe.Merge(errors.ToMaybe(), helpWriter.ToMaybe())
- .Do((_, writer) => writer.Write(HelpText.AutoBuild(parserResult, maxDisplayWidth)))
+ .Do((_, writer) => writer.Write(HelpText.AutoBuild(parserResult, settings, maxDisplayWidth)))
);
return parserResult;
diff --git a/src/CommandLine/ParserSettings.cs b/src/CommandLine/ParserSettings.cs
index 93962566..b589d1ad 100644
--- a/src/CommandLine/ParserSettings.cs
+++ b/src/CommandLine/ParserSettings.cs
@@ -173,5 +173,10 @@ private void Dispose(bool disposing)
disposed = true;
}
}
+ /// <summary>
+ /// This flag indicate if there is a line break between each option display in help
+ /// </summary>
+ public bool AdditionalNewLineAfterOption { get; set; } = true;
+
}
}
diff --git a/src/CommandLine/Text/HelpText.cs b/src/CommandLine/Text/HelpText.cs
index eaa6ade5..f78b2934 100644
--- a/src/CommandLine/Text/HelpText.cs
+++ b/src/CommandLine/Text/HelpText.cs
@@ -202,11 +202,13 @@ public SentenceBuilder SentenceBuilder
/// <param name='onExample'>A delegate used to customize <see cref="CommandLine.Text.Example"/> model used to render text block of usage examples.</param>
/// <param name="verbsIndex">If true the output style is consistent with verb commands (no dashes), otherwise it outputs options.</param>
/// <param name="maxDisplayWidth">The maximum width of the display.</param>
+ /// <param name="parserSettings">Settings of the parser. Some settings are for help display.</param>
/// <remarks>The parameter <paramref name="verbsIndex"/> is not ontly a metter of formatting, it controls whether to handle verbs or options.</remarks>
public static HelpText AutoBuild<T>(
ParserResult<T> parserResult,
Func<HelpText, HelpText> onError,
Func<Example, Example> onExample,
+ ParserSettings parserSettings,
bool verbsIndex = false,
int maxDisplayWidth = DefaultMaximumLength)
{
@@ -214,7 +216,7 @@ public static HelpText AutoBuild<T>(
{
Heading = HeadingInfo.Empty,
Copyright = CopyrightInfo.Empty,
- AdditionalNewLineAfterOption = true,
+ AdditionalNewLineAfterOption = parserSettings.AdditionalNewLineAfterOption,
AddDashesToOption = !verbsIndex,
MaximumDisplayWidth = maxDisplayWidth
};
@@ -276,12 +278,13 @@ public static HelpText AutoBuild<T>(
/// </summary>
/// <param name='parserResult'>The <see cref="CommandLine.ParserResult{T}"/> containing the instance that collected command line arguments parsed with <see cref="CommandLine.Parser"/> class.</param>
/// <param name="maxDisplayWidth">The maximum width of the display.</param>
+ /// <param name="parserSettings">Settings of the parser. Some settings are for help display.</param>
/// <returns>
/// An instance of <see cref="CommandLine.Text.HelpText"/> class.
/// </returns>
/// <remarks>This feature is meant to be invoked automatically by the parser, setting the HelpWriter property
/// of <see cref="CommandLine.ParserSettings"/>.</remarks>
- public static HelpText AutoBuild<T>(ParserResult<T> parserResult, int maxDisplayWidth = DefaultMaximumLength)
+ public static HelpText AutoBuild<T>(ParserResult<T> parserResult, ParserSettings parserSettings, int maxDisplayWidth = DefaultMaximumLength)
{
if (parserResult.Tag != ParserResultType.NotParsed)
throw new ArgumentException("Excepting NotParsed<T> type.", "parserResult");
@@ -292,13 +295,13 @@ public static HelpText AutoBuild<T>(ParserResult<T> parserResult, int maxDisplay
return new HelpText(HeadingInfo.Default){MaximumDisplayWidth = maxDisplayWidth }.AddPreOptionsLine(Environment.NewLine);
if (!errors.Any(e => e.Tag == ErrorType.HelpVerbRequestedError))
- return AutoBuild(parserResult, current => DefaultParsingErrorsHandler(parserResult, current), e => e, maxDisplayWidth: maxDisplayWidth);
+ return AutoBuild(parserResult, current => DefaultParsingErrorsHandler(parserResult, current), e => e, maxDisplayWidth: maxDisplayWidth, parserSettings:parserSettings);
var err = errors.OfType<HelpVerbRequestedError>().Single();
var pr = new NotParsed<object>(TypeInfo.Create(err.Type), Enumerable.Empty<Error>());
return err.Matched
- ? AutoBuild(pr, current => DefaultParsingErrorsHandler(pr, current), e => e, maxDisplayWidth: maxDisplayWidth)
- : AutoBuild(parserResult, current => DefaultParsingErrorsHandler(parserResult, current), e => e, true, maxDisplayWidth);
+ ? AutoBuild(pr, current => DefaultParsingErrorsHandler(pr, current), e => e, maxDisplayWidth: maxDisplayWidth, parserSettings: parserSettings)
+ : AutoBuild(parserResult, current => DefaultParsingErrorsHandler(parserResult, current), e => e, parserSettings, true, maxDisplayWidth);
}
/// <summary>
diff --git a/tests/CommandLine.Tests/Unit/Text/HelpTextTests.cs b/tests/CommandLine.Tests/Unit/Text/HelpTextTests.cs
index 90ca41b5..bf4c00d2 100644
--- a/tests/CommandLine.Tests/Unit/Text/HelpTextTests.cs
+++ b/tests/CommandLine.Tests/Unit/Text/HelpTextTests.cs
@@ -315,7 +315,7 @@ public void Invoke_AutoBuild_for_Options_returns_appropriate_formatted_text()
});
// Exercize system
- var helpText = HelpText.AutoBuild(fakeResult);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings());
// Verify outcome
var lines = helpText.ToString().ToNotEmptyLines().TrimStringArray();
@@ -350,7 +350,7 @@ public void Invoke_AutoBuild_for_Verbs_with_specific_verb_returns_appropriate_fo
});
// Exercize system
- var helpText = HelpText.AutoBuild(fakeResult);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings());
// Verify outcome
var lines = helpText.ToString().ToNotEmptyLines().TrimStringArray();
@@ -383,7 +383,7 @@ public void Invoke_AutoBuild_for_Verbs_with_specific_verb_returns_appropriate_fo
});
// Exercize system
- var helpText = HelpText.AutoBuild(fakeResult, maxDisplayWidth: 100);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings(), maxDisplayWidth: 100);
// Verify outcome
var lines = helpText.ToString().ToNotEmptyLines().TrimStringArray();
@@ -415,7 +415,7 @@ public void Invoke_AutoBuild_for_Verbs_with_unknown_verb_returns_appropriate_for
new Error[] { new HelpVerbRequestedError(null, null, false) });
// Exercize system
- var helpText = HelpText.AutoBuild(fakeResult);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings());
// Verify outcome
var lines = helpText.ToString().ToNotEmptyLines().TrimStringArray();
@@ -501,7 +501,7 @@ public void Invoke_AutoBuild_for_Options_with_Usage_returns_appropriate_formatte
});
// Exercize system
- var helpText = HelpText.AutoBuild(fakeResult);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings());
// Verify outcome
var text = helpText.ToString();
@@ -554,7 +554,7 @@ public void Default_set_to_sequence_should_be_properly_printed()
// Exercize system
handlers.ChangeCulture();
- var helpText = HelpText.AutoBuild(fakeResult);
+ var helpText = HelpText.AutoBuild(fakeResult, new ParserSettings());
handlers.ResetCulture();
// Verify outcome
@@ -585,7 +585,7 @@ public void AutoBuild_when_no_assembly_attributes()
{
onErrorCalled = true;
return ht;
- }, ex => ex);
+ }, ex => ex, new ParserSettings());
onErrorCalled.Should().BeTrue();
actualResult.Copyright.Should().Be(expectedCopyright);
@@ -617,7 +617,7 @@ public void AutoBuild_with_assembly_title_and_version_attributes_only()
{
onErrorCalled = true;
return ht;
- }, ex => ex);
+ }, ex => ex, new ParserSettings());
onErrorCalled.Should().BeTrue();
actualResult.Heading.Should().Be(string.Format("{0} {1}", expectedTitle, expectedVersion));
@@ -648,7 +648,7 @@ public void AutoBuild_with_assembly_company_attribute_only()
{
onErrorCalled = true;
return ht;
- }, ex => ex);
+ }, ex => ex, new ParserSettings());
onErrorCalled.Should().BeFalse(); // Other attributes have fallback logic
actualResult.Copyright.Should().Be(string.Format("Copyright (C) {0} {1}", DateTime.Now.Year, expectedCompany));