dotnet / dotnet/command-line-api
FromAmong should consider custom parsing
- Dominant language
- C#
- Stars
- 3.7k
- Forks
- 428
- PR merge metrics
- No merged PRs in 30d
Description
2.0.0-beta1.21601.2 breaks the following use case:
Given option:
```
internal static Option> CreateColumnsOption()
{
Option> option = new(new[] { "--columns" }, ParseCommaSeparatedValues)
{
Arity = new ArgumentArity(1, 4),
Description = LocalizableStrings.OptionDescriptionColumns,
AllowMultipleArgumentsPerToken = true,
};
option.FromAmong(
TabularOutputSettings.ColumnNames.Author,
TabularOutputSettings.ColumnNames.Language,
TabularOutputSettings.ColumnNames.Type,
TabularOutputSettings.ColumnNames.Tags);
return option;
}
internal static IReadOnlyList ParseCommaSeparatedValues(ArgumentResult result)
{
List values = new List();
foreach (var value in result.Tokens.Select(t => t.Value))
{
values.AddRange(value.Split(",", StringSplitOptions.TrimEntries).Where(s => !string.IsNullOrWhiteSpace(s)));
}
return values;
}
```
the following use cases fail:
`new list --columns author, type --columns tag`
`new list --columns author,type`
Error is:
```
System.InvalidOperationException : Argument 'author,type' not recognized. Must be one of:
'author'
'language'
'type'
'tags'
Stack Trace:
ArgumentConverter.GetValueOrDefault[T](ArgumentConversionResult result)
OptionResult.GetValueOrDefault[T]()
ParseResult.GetValueForOption[T](Option`1 option)
GlobalArgs.ParseTabularOutputSettings(ITabularOutputCommand command, ParseResult parseResult) line 42
ListCommandArgs.ctor(BaseListCommand command, ParseResult parseResult) line 128
ListTests.List_CanParseColumns(String command, String[] expectedColumns) line 222
```
This scenario worked in 2.0.0-beta1.21561.1
Contributor guide
Assessment
This issue has not been assessed yet.