command-line-api icon indicating copy to clipboard operation
command-line-api copied to clipboard

Validator API: Error message duplicated for array argument

Open c-s-n opened this issue 2 years ago • 0 comments

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

using System.CommandLine;

var inputDirectoryArgument = new Argument<DirectoryInfo>(name: "Input directory");
inputDirectoryArgument
    .AddValidator(result =>
        {
            result.ErrorMessage = "Validation error on input directory";
        });

var outputDirectoriesArgument = new Argument<DirectoryInfo[]>(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

c-s-n avatar Apr 09 '22 12:04 c-s-n