dotnet / dotnet/command-line-api

Validator API: Error message duplicated for array argument

Open
#1,703 0 comments 0 reactions 0 assignees View on GitHub
Area-Parser and Binder bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.