Skip to content

Commit 08d0408

Browse files
committed
prevent argument alias from matching tokens
1 parent 2d02d36 commit 08d0408

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

src/System.CommandLine.Tests/ParserTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,6 +1680,24 @@ public void Arguments_can_match_the_aliases_of_sibling_options(string input)
16801680
valueForOption.Should().Be("-y");
16811681
}
16821682

1683+
[Fact]
1684+
public void Argument_name_is_not_matched_as_a_token()
1685+
{
1686+
var nameArg = new Argument<string>("name");
1687+
var columnsArg = new Argument<IEnumerable<string>>("columns");
1688+
1689+
var command = new Command("add", "Adds a new series")
1690+
{
1691+
nameArg,
1692+
columnsArg
1693+
};
1694+
1695+
var result = command.Parse("name one two three");
1696+
1697+
result.ValueForArgument(nameArg).Should().Be("name");
1698+
result.ValueForArgument(columnsArg).Should().BeEquivalentTo("one", "two", "three");
1699+
}
1700+
16831701
[Fact]
16841702
public void Option_aliases_do_not_need_to_be_prefixed()
16851703
{

src/System.CommandLine/Parsing/StringExtensions.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ private static Dictionary<string, Token> ValidTokens(this ICommand command)
568568
for (var commandAliasIndex = 0; commandAliasIndex < command.Aliases.Count; commandAliasIndex++)
569569
{
570570
var commandAlias = command.Aliases.ElementAt(commandAliasIndex);
571-
571+
572572
tokens.Add(
573573
commandAlias,
574574
new Token(
@@ -583,12 +583,16 @@ private static Dictionary<string, Token> ValidTokens(this ICommand command)
583583
{
584584
var childAlias = child.Aliases.ElementAt(childAliasIndex);
585585

586-
tokens[childAlias] =
587-
new Token(
588-
childAlias,
589-
child is ICommand
590-
? TokenType.Command
591-
: TokenType.Option);
586+
switch (child)
587+
{
588+
case ICommand _:
589+
tokens.TryAdd(childAlias, new Token(childAlias, TokenType.Command));
590+
break;
591+
592+
case IOption _:
593+
tokens.TryAdd(childAlias, new Token(childAlias, TokenType.Option));
594+
break;
595+
}
592596
}
593597
}
594598
}

0 commit comments

Comments
 (0)