commandline icon indicating copy to clipboard operation
commandline copied to clipboard

Enum with 0 value not shown on Example

Open DimonSmart opened this issue 6 years ago • 3 comments

public class MyOption { [Option('t', "type", Required = true, HelpText = "My entity")] public EntityType MyEntityType { get; set; } public enum MyEntityType { X0, // Example for X0 is empty. If change this line to X0 =1, everything is ok X1, X2 }

    [Usage(ApplicationAlias = "...")]
    public static IEnumerable<Example> Examples
    {
        get
        {
            foreach (EntityType entityType in Enum.GetValues(typeof(EntityType)))
            {
                yield return new Example(entityType.ToString(), new MyOption { MyEntityType = entityType});
            }
        }
    }
}

DimonSmart avatar Dec 07 '18 06:12 DimonSmart

This looks like a bug around examples with Required set to true. The example is empty because X0 is the default value for this enum - if you remove Required you'll find that myapp.exe with no arguments sets MyEntityType to X0 automatically. myapp.exe and myapp.exe -t X0 produce the exact same result.

But the example generator should look at whether the option is required and include it whether or not it's the default value.

nemec avatar Dec 08 '18 05:12 nemec

I took a look at this again and noticed that other value types have the same issue.

   class Options_With_Examples_Having_Default_Values
    {
        [Option('t', "type", HelpText = "My entity")]
        public EntityType MyEntityType { get; set; }

        public enum EntityType
        {
            T0
        }

        [Option('v', "value")]
        public int Value { get; set; }
        [Option('d')]
        public double Double { get; set; }
        [Option('b')]
        public bool Bool { get; set; }

        [Usage(ApplicationAlias = "test.exe")]
        public static IEnumerable<Example> Examples
        {
            get
            {
                yield return new Example("1", new Options_With_Examples_Having_Default_Values { MyEntityType = EntityType.T0 });
                yield return new Example("2", new Options_With_Examples_Having_Default_Values { Value = 1, Double = 0.1, Bool = true });
            }
        }
    }

Returns

1:
  test.exe --type T0
2:
  test.exe --type T0

and the same example with non-default values returns

1:
  test.exe --type T0
2:
  test.exe -d 0,1 --type T0 --value 1

The enum is included in both examples too, because of the change I made in #452.

njqdev avatar Jun 02 '19 18:06 njqdev

If you are looking for help on this.. I would be glad to take it up @nemec @ericnewton76 @moh-hassan

It would be my first open-source contribution

Thanks In Advance :)

shubhiroy avatar Aug 06 '23 18:08 shubhiroy