Skip to content

Commit 98a466e

Browse files
authored
Ensure longer option is parsed with argument delimiters (#1179)
* Ensure longer option is parsed with argument delimiters * PR feedback
1 parent 66d9708 commit 98a466e

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/System.CommandLine.Tests/OptionTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,12 +371,14 @@ public void When_Name_is_set_to_its_current_value_then_it_is_not_removed_from_al
371371
option.Aliases.Should().Contain("name");
372372
}
373373

374-
[Fact]
375-
public void When_aliases_overlap_the_longer_alias_is_chosen()
374+
[Theory]
375+
[InlineData("-option value")]
376+
[InlineData("-option:value")]
377+
public void When_aliases_overlap_the_longer_alias_is_chosen(string parseInput)
376378
{
377379
var option = new Option<string>(new[] { "-o", "-option" });
378380

379-
var parseResult = option.Parse("-option value");
381+
var parseResult = option.Parse(parseInput);
380382
parseResult.ValueForOption(option).Should().Be("value");
381383
}
382384

src/System.CommandLine/Parsing/StringExtensions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ bool CanBeUnbundled(string arg, out IReadOnlyList<string>? replacement)
205205
}
206206

207207
// don't unbundle if this is a known option
208-
if (knownTokens.ContainsKey(arg))
208+
if (knownTokens.ContainsKey(arg) ||
209+
knownTokens
210+
.SelectMany(token => _argumentDelimiters.Select(delimiter => token.Key + delimiter))
211+
.Any(token => arg.Contains(token)))
209212
{
210213
return false;
211214
}

0 commit comments

Comments
 (0)