Skip to content

Commit 2faedc5

Browse files
Merge pull request #2475 from KathleenDollard/symbolvalue-usage
Some argument/option usage CliValueSymbol
2 parents 8b18d6e + 4e3de56 commit 2faedc5

File tree

5 files changed

+23
-25
lines changed

5 files changed

+23
-25
lines changed

src/System.CommandLine.Subsystems/ValueProvider.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,26 @@ private bool TryGetValue<T>(CliSymbol symbol, out T? value)
3737
public T? GetValue<T>(CliValueSymbol valueSymbol)
3838
=> GetValueInternal<T>(valueSymbol);
3939

40-
private T? GetValueInternal<T>(CliSymbol? symbol)
40+
private T? GetValueInternal<T>(CliValueSymbol? valueSymbol)
4141
{
4242
// NOTE: We use the subsystem's TryGetAnnotation here instead of the GetDefaultValue etc
4343
// extension methods, as the subsystem's TryGetAnnotation respects its annotation provider
44-
return symbol switch
44+
return valueSymbol switch
4545
{
46-
not null when TryGetValue<T>(symbol, out var value)
46+
{ } when TryGetValue<T>(valueSymbol, out var value)
4747
=> value, // It has already been retrieved at least once
48-
CliArgument argument when parseResult?.GetValueResult(argument) is { } valueResult // GetValue not used because it would always return a value
49-
=> UseValue(symbol, valueResult.GetValue<T>()), // Value was supplied during parsing,
50-
CliOption option when parseResult?.GetValueResult(option) is { } valueResult // GetValue not used because it would always return a value
51-
=> UseValue(symbol, valueResult.GetValue<T>()), // Value was supplied during parsing
48+
{ } when parseResult?.GetValueResult(valueSymbol) is { } valueResult // GetValue not used because it would always return a value
49+
=> UseValue(valueSymbol, valueResult.GetValue<T>()), // Value was supplied during parsing,
5250
// Value was not supplied during parsing, determine default now
5351
// configuration values go here in precedence
5452
//not null when GetDefaultFromEnvironmentVariable<T>(symbol, out var envName)
5553
// => UseValue(symbol, GetEnvByName(envName)),
56-
not null when symbol.TryGetAnnotation(ValueAnnotations.DefaultValueCalculation, out Func<T?>? defaultValueCalculation)
57-
=> UseValue(symbol, CalculatedDefault<T>(symbol, (Func<T?>)defaultValueCalculation)),
58-
not null when symbol.TryGetAnnotation(ValueAnnotations.DefaultValue, out T? explicitValue)
59-
=> UseValue(symbol, explicitValue),
60-
null => throw new ArgumentNullException(nameof(symbol)),
61-
_ => UseValue(symbol, default(T))
54+
{ } when valueSymbol.TryGetAnnotation(ValueAnnotations.DefaultValueCalculation, out Func<T?>? defaultValueCalculation)
55+
=> UseValue(valueSymbol, CalculatedDefault<T>(valueSymbol, (Func<T?>)defaultValueCalculation)),
56+
{ } when valueSymbol.TryGetAnnotation( ValueAnnotations.DefaultValue, out T? explicitValue)
57+
=> UseValue(valueSymbol, explicitValue),
58+
null => throw new ArgumentNullException(nameof(valueSymbol)),
59+
_ => UseValue(valueSymbol, default(T))
6260
};
6361

6462
TValue? UseValue<TValue>(CliSymbol symbol, TValue? value)
@@ -68,7 +66,7 @@ not null when symbol.TryGetAnnotation(ValueAnnotations.DefaultValue, out T? expl
6866
}
6967
}
7068

71-
private static T? CalculatedDefault<T>(CliSymbol symbol, Func<T?> defaultValueCalculation)
69+
private static T? CalculatedDefault<T>(CliValueSymbol valueSymbol, Func<T?> defaultValueCalculation)
7270
{
7371
var objectValue = defaultValueCalculation();
7472
var value = objectValue is null

src/System.CommandLine/ParseResult.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ CommandLineText is null
172172
public T? GetValue<T>(CliOption<T> option)
173173
=> GetValueInternal<T>(option);
174174

175-
private T? GetValueInternal<T>(CliSymbol symbol)
176-
=> valueResultDictionary.TryGetValue(symbol, out var result)
175+
private T? GetValueInternal<T>(CliValueSymbol valueSymbol)
176+
=> valueResultDictionary.TryGetValue(valueSymbol, out var result)
177177
? (T?)result.Value
178178
: default;
179179

@@ -203,15 +203,15 @@ CommandLineText is null
203203
*/
204204

205205
/// <summary>
206-
/// Gets the ValueResult, if any, for the specified option or argument
206+
/// Gets the <see cref="CliValueResult"/> if any, for the specified option or argument
207207
/// </summary>
208208
/// <param name="valueSymbol">The option or argument for which to find a result.</param>
209209
/// <returns>A result for the specified option, or <see langword="null"/> if it was not entered by the user.</returns>
210210
public CliValueResult? GetValueResult(CliValueSymbol valueSymbol)
211211
=> GetValueResultInternal(valueSymbol);
212212

213-
private CliValueResult? GetValueResultInternal(CliSymbol symbol)
214-
=> valueResultDictionary.TryGetValue(symbol, out var result)
213+
private CliValueResult? GetValueResultInternal(CliValueSymbol valueSymbol)
214+
=> valueResultDictionary.TryGetValue(valueSymbol, out var result)
215215
? result
216216
: null;
217217

src/System.CommandLine/Parsing/CliSymbolResultInternal.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public IEnumerable<ParseError> Errors
7070
/// </summary>
7171
/// <param name="argument">The argument for which to find a result.</param>
7272
/// <returns>An argument result if the argument was matched by the parser or has a default value; otherwise, <c>null</c>.</returns>
73-
internal CliArgumentResultInternal? GetResult(CliArgument argument) => SymbolResultTree.GetResult(argument);
73+
internal CliArgumentResultInternal? GetResult(CliArgument argument) => SymbolResultTree.GetResultInternal(argument);
7474

7575
/* Not used
7676
/// <summary>
@@ -86,7 +86,7 @@ public IEnumerable<ParseError> Errors
8686
/// </summary>
8787
/// <param name="option">The option for which to find a result.</param>
8888
/// <returns>An option result if the option was matched by the parser or has a default value; otherwise, <c>null</c>.</returns>
89-
internal CliOptionResultInternal? GetResult(CliOption option) => SymbolResultTree.GetResult(option);
89+
internal CliOptionResultInternal? GetResult(CliOption option) => SymbolResultTree.GetResultInternal(option);
9090

9191
// TODO: directives
9292
/*

src/System.CommandLine/Parsing/SymbolLookupByName.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private bool TryGetSymbolAndParentInternal(string name,
109109
{
110110
if (commandCache.SymbolsByName.TryGetValue(name, out symbol))
111111
{
112-
if (symbol is not null && (!valuesOnly || (symbol is CliArgument or CliOption)))
112+
if (symbol is not null && (!valuesOnly || (symbol is CliValueSymbol)))
113113
{
114114
parent = commandCache.Command;
115115
errorMessage = null;

src/System.CommandLine/Parsing/SymbolResultTree.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ internal SymbolResultTree(
3737

3838
internal int ErrorCount => Errors?.Count ?? 0;
3939

40-
internal CliArgumentResultInternal? GetResult(CliArgument argument)
40+
internal CliArgumentResultInternal? GetResultInternal(CliArgument argument)
4141
=> TryGetValue(argument, out CliSymbolResultInternal? result) ? (CliArgumentResultInternal)result : default;
4242

43-
internal CliCommandResultInternal? GetResult(CliCommand command)
43+
internal CliCommandResultInternal? GetResultInternal(CliCommand command)
4444
=> TryGetValue(command, out var result) ? (CliCommandResultInternal)result : default;
4545

46-
internal CliOptionResultInternal? GetResult(CliOption option)
46+
internal CliOptionResultInternal? GetResultInternal(CliOption option)
4747
=> TryGetValue(option, out CliSymbolResultInternal? result) ? (CliOptionResultInternal)result : default;
4848

4949
// TODO: Determine how this is used. It appears to be O^n in the size of the tree and so if it is called multiple times, we should reconsider to avoid O^(N*M)

0 commit comments

Comments
 (0)