Skip to content

Commit e8e9617

Browse files
authored
Merge pull request #201 from dongle-the-gadget/hide-default-value
Add HideDefaultValue attribute
2 parents 79fecff + 0f64123 commit e8e9617

File tree

5 files changed

+42
-4
lines changed

5 files changed

+42
-4
lines changed

src/ConsoleAppFramework/Command.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public record class CommandParameter
155155
public required bool IsNullableReference { get; init; }
156156
public required bool IsParams { get; init; }
157157
public required bool IsHidden { get; init; } // Hide command parameter help
158+
public bool IsDefaultValueHidden { get; init; } = false; // Hide default value in command parameter help
158159
public required string Name { get; init; }
159160
public required string OriginalParameterName { get; init; }
160161
public required bool HasDefaultValue { get; init; }

src/ConsoleAppFramework/CommandHelpBuilder.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ static string BuildOptionsMessage(CommandHelpDefinition definition)
161161
var optionsFormatted = definition.Options
162162
.Where(x => !x.Index.HasValue)
163163
.Where(x => !x.IsHidden)
164-
.Select(x => (Options: string.Join("|", x.Options) + (x.IsFlag ? string.Empty : $" {x.FormattedValueTypeName}{(x.IsParams ? "..." : "")}"), x.Description, x.IsRequired, x.IsFlag, x.DefaultValue))
164+
.Select(x => (Options: string.Join("|", x.Options) + (x.IsFlag ? string.Empty : $" {x.FormattedValueTypeName}{(x.IsParams ? "..." : "")}"), x.Description, x.IsRequired, x.IsFlag, x.DefaultValue, x.IsDefaultValueHidden))
165165
.ToArray();
166166

167167
if (!optionsFormatted.Any()) return string.Empty;
@@ -202,7 +202,8 @@ static string BuildOptionsMessage(CommandHelpDefinition definition)
202202
}
203203
else if (opt.DefaultValue != null)
204204
{
205-
sb.Append($" (Default: {opt.DefaultValue})");
205+
if (!opt.IsDefaultValueHidden)
206+
sb.Append($" (Default: {opt.DefaultValue})");
206207
}
207208
else if (opt.IsRequired)
208209
{
@@ -285,6 +286,7 @@ static CommandHelpDefinition CreateCommandHelpDefinition(Command descriptor)
285286
var isFlag = item.Type.SpecialType == Microsoft.CodeAnalysis.SpecialType.System_Boolean;
286287
var isParams = item.IsParams;
287288
var isHidden = item.IsHidden;
289+
var isDefaultValueHidden = item.IsDefaultValueHidden;
288290

289291
var defaultValue = default(string);
290292
if (item.HasDefaultValue)
@@ -306,7 +308,7 @@ static CommandHelpDefinition CreateCommandHelpDefinition(Command descriptor)
306308
}
307309

308310
var paramTypeName = item.ToTypeShortString();
309-
parameterDefinitions.Add(new CommandOptionHelpDefinition(options.Distinct().ToArray(), description, paramTypeName, defaultValue, index, isFlag, isParams, isHidden));
311+
parameterDefinitions.Add(new CommandOptionHelpDefinition(options.Distinct().ToArray(), description, paramTypeName, defaultValue, index, isFlag, isParams, isHidden, isDefaultValueHidden));
310312
}
311313

312314
var commandName = descriptor.Name;
@@ -342,9 +344,10 @@ class CommandOptionHelpDefinition
342344
public bool IsFlag { get; }
343345
public bool IsParams { get; }
344346
public bool IsHidden { get; }
347+
public bool IsDefaultValueHidden { get; }
345348
public string FormattedValueTypeName => "<" + ValueTypeName + ">";
346349

347-
public CommandOptionHelpDefinition(string[] options, string description, string valueTypeName, string? defaultValue, int? index, bool isFlag, bool isParams, bool isHidden)
350+
public CommandOptionHelpDefinition(string[] options, string description, string valueTypeName, string? defaultValue, int? index, bool isFlag, bool isParams, bool isHidden, bool isDefaultValueHidden)
348351
{
349352
Options = options;
350353
Description = description;
@@ -354,6 +357,7 @@ public CommandOptionHelpDefinition(string[] options, string description, string
354357
IsFlag = isFlag;
355358
IsParams = isParams;
356359
IsHidden = isHidden;
360+
IsDefaultValueHidden = isDefaultValueHidden;
357361
}
358362
}
359363
}

src/ConsoleAppFramework/ConsoleAppBaseCode.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ public RegisterCommandsAttribute(string commandPath)
147147
}
148148
}
149149
150+
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
151+
internal sealed class HideDefaultValueAttribute : Attribute
152+
{
153+
}
154+
150155
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false, Inherited = false)]
151156
internal class ConsoleAppFrameworkGeneratorOptionsAttribute : Attribute
152157
{

src/ConsoleAppFramework/Parser.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ bool IsParsableType(ITypeSymbol type)
725725
var isCancellationToken = SymbolEqualityComparer.Default.Equals(x.Type, wellKnownTypes.CancellationToken);
726726
var isConsoleAppContext = x.Type!.Name == "ConsoleAppContext";
727727
var isHiddenParameter = x.GetAttributes().Any(x => x.AttributeClass?.Name == "HiddenAttribute");
728+
var isDefaultValueHidden = x.GetAttributes().Any(x => x.AttributeClass?.Name == "HideDefaultValueAttribute");
728729

729730
object? keyedServiceKey = null;
730731
if (hasFromKeyedServices)
@@ -764,6 +765,7 @@ bool IsParsableType(ITypeSymbol type)
764765
IsConsoleAppContext = isConsoleAppContext,
765766
IsParams = x.IsParams,
766767
IsHidden = isHiddenParameter,
768+
IsDefaultValueHidden = isDefaultValueHidden,
767769
Location = x.DeclaringSyntaxReferences[0].GetSyntax().GetLocation(),
768770
Type = new EquatableTypeSymbol(x.Type),
769771
HasDefaultValue = x.HasExplicitDefaultValue,

tests/ConsoleAppFramework.GeneratorTests/HelpTest.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,32 @@ hello my world.
318318
Options:
319319
-f|-fb|--foo-bar <string> my foo, is not bar. (Required)
320320
321+
""");
322+
}
323+
324+
[Fact]
325+
public void HideDefaultValue()
326+
{
327+
var code = """
328+
ConsoleApp.Run(args, Commands.Hello);
329+
330+
static class Commands
331+
{
332+
/// <summary>
333+
/// Display Hello.
334+
/// </summary>
335+
/// <param name="message">-m, Message to show.</param>
336+
public static void Hello([HideDefaultValue]string message = "ConsoleAppFramework") => Console.Write($"Hello, {message}");
337+
}
338+
""";
339+
verifier.Execute(code, args: "--help", expected: """
340+
Usage: [options...] [-h|--help] [--version]
341+
342+
Display Hello.
343+
344+
Options:
345+
-m|--message <string> Message to show.
346+
321347
""");
322348
}
323349

0 commit comments

Comments
 (0)