Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void SetupRootCommand()
GenerateTestNestedCommands(rootCommand, TestCommandsDepth, TestCommandsDepth);

// Choose only one path from the commands tree for the test arguments string
ISymbol currentCmd = rootCommand;
Symbol currentCmd = rootCommand;
while (currentCmd.Children.Count > 0)
{
currentCmd = currentCmd.Children[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static class CommandExtensions
public static void SetHandler<TDelegate>(
this Command command,
TDelegate @delegate,
params ISymbol[] symbols)
params Symbol[] symbols)
{
throw new InvalidOperationException(_messageForWhenGeneratorIsNotInUse);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private bool ShortCutTheBinding()
bindingContext.ParseResult.CommandResult.LocalizationResources,
out var boundValue)
? (true, boundValue?.Value, true)
: (false,(object?) null, false);
: (false, null, false);
}

private (bool success, object? newInstance, bool anyNonDefaults) InstanceFromSpecificConstructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ public bool TryGetValue(IValueDescriptor valueDescriptor,
var specificDescriptor = ValueDescriptor;
switch (specificDescriptor)
{
case IOption option:
case Option option:
var optionResult = bindingContext?.ParseResult.FindResultFor(option);
if (optionResult is not null)
{
boundValue = optionResult.GetValueOrDefault();
return true;
}
break;
case IArgument argument:
case Argument argument:
var argumentResult = bindingContext?.ParseResult.FindResultFor(argument);
if (argumentResult is not null)
{
Expand Down
6 changes: 3 additions & 3 deletions src/System.CommandLine.Tests/CommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ public void Commands_can_have_aliases()

var result = command.Parse("that");

result.CommandResult.Command.Should().Be(command);
result.CommandResult.Command.Should().BeSameAs(command);
result.Errors.Should().BeEmpty();
}

Expand All @@ -229,7 +229,7 @@ public void RootCommand_can_have_aliases()

var result = command.Parse("that");

result.CommandResult.Command.Should().Be(command);
result.CommandResult.Command.Should().BeSameAs(command);
result.Errors.Should().BeEmpty();
}

Expand All @@ -246,7 +246,7 @@ public void Subcommands_can_have_aliases()

var result = rootCommand.Parse("that");

result.CommandResult.Command.Should().Be(subcommand);
result.CommandResult.Command.Should().BeSameAs(subcommand);
result.Errors.Should().BeEmpty();
}

Expand Down
2 changes: 1 addition & 1 deletion src/System.CommandLine.Tests/Help/HelpBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static class HelpBuilderExtensions
{
public static void Write(
this HelpBuilder builder,
ICommand command,
Command command,
TextWriter writer) =>
builder.Write(new HelpContext(builder, command, writer));
}
Expand Down
16 changes: 8 additions & 8 deletions src/System.CommandLine.Tests/ParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -838,8 +838,8 @@ public void A_renamed_RootCommand_can_be_omitted_from_the_parsed_args()
var result2 = rootCommand.Parse("outer inner -x hello");
var result3 = rootCommand.Parse($"{RootCommand.ExecutableName} inner -x hello");

result2.RootCommandResult.Command.Should().Be(result1.RootCommandResult.Command);
result3.RootCommandResult.Command.Should().Be(result1.RootCommandResult.Command);
result2.RootCommandResult.Command.Should().BeSameAs(result1.RootCommandResult.Command);
result3.RootCommandResult.Command.Should().BeSameAs(result1.RootCommandResult.Command);
}

[Fact]
Expand Down Expand Up @@ -1069,19 +1069,19 @@ public void Option_and_Command_can_have_the_same_alias()
.CommandResult
.Command
.Should()
.Be(innerCommand);
.BeSameAs(innerCommand);

parser.Parse("outer --inner")
.CommandResult
.Command
.Should()
.Be(outerCommand);
.BeSameAs(outerCommand);

parser.Parse("outer --inner inner")
.CommandResult
.Command
.Should()
.Be(innerCommand);
.BeSameAs(innerCommand);

parser.Parse("outer --inner inner")
.CommandResult
Expand Down Expand Up @@ -1218,7 +1218,7 @@ public void Option_arguments_can_match_subcommands()
_output.WriteLine(result.ToString());

result.GetValueForOption(optionA).Should().Be("subcommand");
result.CommandResult.Command.Should().Be(root);
result.CommandResult.Command.Should().BeSameAs(root);
}

[Fact]
Expand All @@ -1236,7 +1236,7 @@ public void Arguments_can_match_subcommands()

var result = root.Parse("subcommand one two three subcommand four");

result.CommandResult.Command.Should().Be(subcommand);
result.CommandResult.Command.Should().BeSameAs(subcommand);

result.GetValueForArgument(argument)
.Should()
Expand Down Expand Up @@ -1681,7 +1681,7 @@ public void Empty_strings_in_parsed_args_array_are_ignored()

result.Errors.Should().BeEmpty();

result.CommandResult.Command.Should().Be(subcommand);
result.CommandResult.Command.Should().BeSameAs(subcommand);
result.FindResultFor(option).Should().NotBeNull();
}

Expand Down
2 changes: 1 addition & 1 deletion src/System.CommandLine.Tests/ParsingValidationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -915,7 +915,7 @@ public void A_command_with_subcommands_is_valid_to_invoke_if_it_has_a_handler()
var result = outer.Parse("outer inner");

result.Errors.Should().BeEmpty();
result.CommandResult.Command.Should().Be(inner);
result.CommandResult.Command.Should().BeSameAs(inner);
}

[Fact]
Expand Down
2 changes: 1 addition & 1 deletion src/System.CommandLine.Tests/SymbolSetExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace System.CommandLine.Tests
{
internal static class SymbolSetExtensions
{
internal static ISymbol GetByAlias(this SymbolSet symbolSet, string alias)
internal static Symbol GetByAlias(this SymbolSet symbolSet, string alias)
=> symbolSet.SingleOrDefault(symbol => symbol.Name.Equals(alias) || symbol is IdentifierSymbol id && id.HasAlias(alias));

internal static bool ContainsAlias(this SymbolSet symbolSet, string alias)
Expand Down
10 changes: 4 additions & 6 deletions src/System.CommandLine/Argument.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
using System.CommandLine.Binding;
using System.CommandLine.Parsing;
using System.CommandLine.Completions;
using System.Diagnostics.CodeAnalysis;
using System.Linq;

namespace System.CommandLine
{
/// <inheritdoc cref="IArgument"/>
public class Argument : Symbol, IArgument
/// <summary>
/// A symbol defining a value that can be passed on the command line to a <see cref="Command">command</see> or <see cref="Option">option</see>.
/// </summary>
public class Argument : Symbol, IValueDescriptor
{
private Func<ArgumentResult, object?>? _defaultValueFactory;
private ArgumentArity _arity;
Expand Down Expand Up @@ -204,9 +205,6 @@ public override IEnumerable<CompletionItem> GetCompletions(CompletionContext con
/// <inheritdoc />
public override string ToString() => $"{nameof(Argument)}: {Name}";

/// <inheritdoc />
ArgumentArity IArgument.Arity => Arity;

/// <inheritdoc />
string IValueDescriptor.ValueName => Name;
}
Expand Down
10 changes: 5 additions & 5 deletions src/System.CommandLine/ArgumentArity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@ public ArgumentArity(int minimumNumberOfValues, int maximumNumberOfValues)
}

/// <summary>
/// Gets the minimum number of values required for an <see cref="IArgument">argument</see>.
/// Gets the minimum number of values required for an <see cref="Argument">argument</see>.
/// </summary>
public int MinimumNumberOfValues { get; }

/// <summary>
/// Gets the maximum number of values allowed for an <see cref="IArgument">argument</see>.
/// Gets the maximum number of values allowed for an <see cref="Argument">argument</see>.
/// </summary>
public int MaximumNumberOfValues { get; }

Expand All @@ -72,7 +72,7 @@ public override int GetHashCode()

internal static FailedArgumentConversionArityResult? Validate(
SymbolResult symbolResult,
IArgument argument,
Argument argument,
int minimumNumberOfValues,
int maximumNumberOfValues)
{
Expand Down Expand Up @@ -148,12 +148,12 @@ internal static ArgumentArity Default(Type type, Argument argument, ParentNode?

if (type != typeof(string) && typeof(IEnumerable).IsAssignableFrom(type))
{
return parent is ICommand
return parent is Command
? ZeroOrMore
: OneOrMore;
}

if (parent is ICommand &&
if (parent is Command &&
(argument.HasDefaultValue ||
type.IsNullable()))
{
Expand Down
10 changes: 5 additions & 5 deletions src/System.CommandLine/Binding/ArgumentConversionResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ namespace System.CommandLine.Binding
{
internal abstract class ArgumentConversionResult
{
private protected ArgumentConversionResult(IArgument argument)
private protected ArgumentConversionResult(Argument argument)
{
Argument = argument ?? throw new ArgumentNullException(nameof(argument));
}

public IArgument Argument { get; }
public Argument Argument { get; }

internal string? ErrorMessage { get; set; }

internal static FailedArgumentConversionResult Failure(IArgument argument, string error) => new(argument, error);
internal static FailedArgumentConversionResult Failure(Argument argument, string error) => new(argument, error);

public static SuccessfulArgumentConversionResult Success(IArgument argument, object? value) => new(argument, value);
public static SuccessfulArgumentConversionResult Success(Argument argument, object? value) => new(argument, value);

internal static NoArgumentConversionResult None(IArgument argument) => new(argument);
internal static NoArgumentConversionResult None(Argument argument) => new(argument);
}
}
8 changes: 4 additions & 4 deletions src/System.CommandLine/Binding/ArgumentConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ internal static class ArgumentConverter
private delegate bool TryConvertString(string token, out object? value);

internal static ArgumentConversionResult ConvertObject(
IArgument argument,
Argument argument,
Type type,
object? value,
LocalizationResources localizationResources)
Expand All @@ -135,7 +135,7 @@ internal static ArgumentConversionResult ConvertObject(
}

private static ArgumentConversionResult ConvertString(
IArgument argument,
Argument argument,
Type type,
string value,
LocalizationResources localizationResources)
Expand Down Expand Up @@ -184,7 +184,7 @@ private static ArgumentConversionResult ConvertString(
}

public static ArgumentConversionResult ConvertStrings(
IArgument argument,
Argument argument,
Type type,
IReadOnlyList<string> tokens,
LocalizationResources localizationResources,
Expand Down Expand Up @@ -354,7 +354,7 @@ private static bool HasStringTypeConverter(this Type type) =>
typeConverter.CanConvertFrom(typeof(string));

private static FailedArgumentConversionResult Failure(
IArgument argument,
Argument argument,
Type expectedType,
string value,
LocalizationResources localizationResources)
Expand Down
2 changes: 1 addition & 1 deletion src/System.CommandLine/Binding/BindingContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ internal bool TryBindToScalarValue(
else
{
var parsed = ArgumentConverter.ConvertObject(
valueDescriptor as IArgument ?? new Argument(valueDescriptor.ValueName),
valueDescriptor as Argument ?? new Argument(valueDescriptor.ValueName),
valueDescriptor.ValueType,
value,
localizationResources);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace System.CommandLine.Binding
{
internal abstract class FailedArgumentConversionArityResult : FailedArgumentConversionResult
{
internal FailedArgumentConversionArityResult(IArgument argument, string errorMessage) : base(argument, errorMessage)
internal FailedArgumentConversionArityResult(Argument argument, string errorMessage) : base(argument, errorMessage)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace System.CommandLine.Binding
internal class FailedArgumentConversionResult : ArgumentConversionResult
{
internal FailedArgumentConversionResult(
IArgument argument,
Argument argument,
string errorMessage) : base(argument)
{
if (string.IsNullOrWhiteSpace(errorMessage))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace System.CommandLine.Binding
internal class FailedArgumentTypeConversionResult : FailedArgumentConversionResult
{
internal FailedArgumentTypeConversionResult(
IArgument argument,
Argument argument,
Type expectedType,
string value,
LocalizationResources localizationResources) :
Expand All @@ -17,22 +17,22 @@ internal FailedArgumentTypeConversionResult(
}

private static string FormatErrorMessage(
IArgument argument,
Argument argument,
Type expectedType,
string value,
LocalizationResources localizationResources)
{
if (argument is Argument a &&
a.FirstParent is not null && a.FirstParent.Next is null)
{
var firstParent = (IIdentifierSymbol) a.FirstParent.Symbol;
var firstParent = (IdentifierSymbol) a.FirstParent.Symbol;
var alias = firstParent.Aliases.First();

switch(firstParent)
{
case ICommand _:
case Command _:
return localizationResources.ArgumentConversionCannotParseForCommand(value, alias, expectedType);
case IOption _:
case Option _:
return localizationResources.ArgumentConversionCannotParseForOption(value, alias, expectedType);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace System.CommandLine.Binding
{
internal class MissingArgumentConversionResult : FailedArgumentConversionArityResult
{
internal MissingArgumentConversionResult(IArgument argument, string errorMessage) : base(argument, errorMessage)
internal MissingArgumentConversionResult(Argument argument, string errorMessage) : base(argument, errorMessage)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace System.CommandLine.Binding
{
internal class NoArgumentConversionResult : ArgumentConversionResult
{
internal NoArgumentConversionResult(IArgument argument) : base(argument)
internal NoArgumentConversionResult(Argument argument) : base(argument)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace System.CommandLine.Binding
internal class SuccessfulArgumentConversionResult : ArgumentConversionResult
{
internal SuccessfulArgumentConversionResult(
IArgument argument,
Argument argument,
object? value) : base(argument)
{
Value = value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace System.CommandLine.Binding
{
internal class TooManyArgumentsConversionResult : FailedArgumentConversionArityResult
{
internal TooManyArgumentsConversionResult(IArgument argument, string errorMessage) : base(argument, errorMessage)
internal TooManyArgumentsConversionResult(Argument argument, string errorMessage) : base(argument, errorMessage)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -772,7 +772,7 @@ public static CommandLineBuilder UseVersionOption(

private static bool ShowHelp(
InvocationContext context,
IOption helpOption)
Option helpOption)
{
if (context.ParseResult.FindResultFor(helpOption) is { })
{
Expand Down
Loading