dotnet / dotnet/command-line-api

`ArgumentResult.OnlyTake` distribute not consumed tokens in unexpected way

Open
#2,734 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
C#
Stars
3.7k
Forks
428
PR merge metrics
No merged PRs in 30d

Description

### Reproduce
```csharp
#:package System.CommandLine@2.0.0

using System;
using System.CommandLine;
using System.CommandLine.Parsing;
using System.Linq;

Func takeTwo = r => {
r.OnlyTake(2);
return r.Tokens.Select(t => t.Value).ToArray();
};
RootCommand root = new() {
new Argument("arg1") { Arity = new(1, 15), CustomParser = takeTwo },
new Argument("arg2") { Arity = new(1, 3), CustomParser = takeTwo },
new Argument("arg3") { Arity = new(1, 3), CustomParser = takeTwo },
new Argument("arg4") { Arity = new(1, 3), CustomParser = takeTwo },
new Argument("arg5") { Arity = new(1, 3), CustomParser = takeTwo },
new Argument("arg6") { Arity = new(1, 10) },
};
var result = root.Parse(Enumerable.Range(1, 20).Select(i => i.ToString()).ToArray());
foreach(Argument a in root.Arguments) {
Console.WriteLine($"{a.Name}: {string.Join(", ", result.GetRequiredValue(a))}");
}
```
https://lab.razor.fyi/#rZPRahQxFIYpCtVcFZ_gMHqRwBB2t60XnW5xWVQopZbdwYIiGKenY9iZpD1J3C7LvIM3vkpfQ_EBfBbJ7mypWvHCvUz-_P_5Q76wH5uMnZAtSdWycI--bj7eu1DFRJUI45nzWMuhrWtlzo60wWc92ZEdxoLTpmz17JfV7dN_V-SJoij9duJIm8uMsRfBFPsDKkONxo_Qhcqn4DxpU759dwBeTTCfWugDQf8A5gwAgOQrU81yNUHeE9lyC30gAyRzO0Hj5BgrLDz30eTla1UFFDK3AyI14yJjTcZG1vq2JpC1HvpgcMpFO8TgFFa99m8K8URR2U0EzGFA2s9aUzeF7q5IYRict3W8MBL0b9o36b8ie3dFbv9P4vbaE3fWnri79sSndz5NR0Rrk7FPioAWkEWirPULOJE_N6FGUh8qlCNlSoyuXkesMNIRIy1zO14M4-IWSyJj55ZQFR_5n51AgTbLQSvRrQAbWuNshfKUtMf4UfiTZK7ksaqx2YP5MkMeWm14kkKStsXlS_QjvAya8GzBNVdCNElkmh3eo2DePHxw_f3L52_nW_ffb1xt_AQ

### Expected output
```
arg1: 1, 2
arg2: 3, 4
arg3: 5, 6
arg4: 7, 8
arg5: 9, 10
arg6: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
```

### Actual output
```
arg1: 1, 2
arg2: 16, 17
arg3: 19, 20
arg4: 4, 5
arg5: 7, 8
arg6: 10, 11, 12, 13, 14, 15, 18, 3, 6, 9
```

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.