dotnet / dotnet/command-line-api
Validator API: Error message duplicated for array argument
- Dominant language
- C#
- Stars
- 3.7k
- Forks
- 428
- PR merge metrics
- No merged PRs in 30d
Description
### Problem
When using the validator API for an array `Argument`, a set `ErrorMessage` will result in a duplicate message being output when the argument is completely omitted.
### Steps to reproduce
```C#
using System.CommandLine;
var inputDirectoryArgument = new Argument(name: "Input directory");
inputDirectoryArgument
.AddValidator(result =>
{
result.ErrorMessage = "Validation error on input directory";
});
var outputDirectoriesArgument = new Argument(name: "Output directories");
outputDirectoriesArgument
.AddValidator(result =>
{
result.ErrorMessage = "Validation error on output directories";
});
var rootCommand = new RootCommand();
rootCommand.Add(inputDirectoryArgument);
rootCommand.Add(outputDirectoriesArgument);
rootCommand.SetHandler((DirectoryInfo inputDirectory, DirectoryInfo[] outputDirectories) => { }, inputDirectoryArgument, outputDirectoriesArgument);
return await rootCommand.InvokeAsync(args);
```
Incorrect behavior:
```
.\BugReport.exe input
Validation error on input directory
Validation error on output directories
Validation error on output directories
```
Correct behavior:
```
.\BugReport.exe
Required argument missing for command: 'BugReport'.
```
```
.\BugReport.exe input output
Validation error on input directory
Validation error on output directories
```
```
.\BugReport.exe input output1 output2
Validation error on input directory
Validation error on output directories
```
### Environment
.NET 6.0
System.CommandLine 2.0.0-beta3.22114.1
Contributor guide
Assessment
This issue has not been assessed yet.