27
27
using System . Diagnostics . CodeAnalysis ;
28
28
using System . Globalization ;
29
29
using System . Reflection ;
30
+ using System . Linq ;
30
31
using CommandLine . Extensions ;
31
32
using CommandLine . Helpers ;
32
33
using CommandLine . Infrastructure ;
@@ -153,10 +154,9 @@ public bool ParseArguments(string[] args, object options, Action<string, object>
153
154
154
155
object verbInstance = null ;
155
156
156
- var context = new ParserContext ( args , options ) ;
157
- var result = DoParseArgumentsVerbs ( context , ref verbInstance ) ;
158
-
159
- onVerbCommand ( context . FirstArgument ?? string . Empty , result ? verbInstance : null ) ;
157
+ var result = DoParseArgumentsVerbs ( args , options , ref verbInstance ) ;
158
+
159
+ onVerbCommand ( args . FirstOrDefault ( ) ?? string . Empty , result ? verbInstance : null ) ;
160
160
161
161
return result ;
162
162
}
@@ -220,11 +220,9 @@ public bool ParseArgumentsStrict(string[] args, object options, Action<string, o
220
220
221
221
object verbInstance = null ;
222
222
223
- var context = new ParserContext ( args , options ) ;
224
-
225
- if ( ! DoParseArgumentsVerbs ( context , ref verbInstance ) )
226
- {
227
- onVerbCommand ( context . FirstArgument ?? string . Empty , null ) ;
223
+ if ( ! DoParseArgumentsVerbs ( args , options , ref verbInstance ) )
224
+ {
225
+ onVerbCommand ( args . FirstOrDefault ( ) ?? string . Empty , null ) ;
228
226
229
227
InvokeAutoBuildIfNeeded ( options ) ;
230
228
@@ -238,9 +236,9 @@ public bool ParseArgumentsStrict(string[] args, object options, Action<string, o
238
236
}
239
237
240
238
return false ;
241
- }
242
-
243
- onVerbCommand ( context . FirstArgument ?? string . Empty , verbInstance ) ;
239
+ }
240
+
241
+ onVerbCommand ( args . FirstOrDefault ( ) ?? string . Empty , verbInstance ) ;
244
242
return true ;
245
243
}
246
244
@@ -297,12 +295,10 @@ private bool DoParseArguments(string[] args, object options)
297
295
var pair = ReflectionUtil . RetrieveMethod < HelpOptionAttribute > ( options ) ;
298
296
var helpWriter = Settings . HelpWriter ;
299
297
300
- var context = new ParserContext ( args , options ) ;
301
-
302
298
if ( pair != null && helpWriter != null )
303
299
{
304
300
// If help can be handled is displayed if is requested or if parsing fails
305
- if ( ParseHelp ( args , pair . Right ) || ! DoParseArgumentsCore ( context ) )
301
+ if ( ParseHelp ( args , pair . Right ) || ! DoParseArgumentsCore ( args , options ) )
306
302
{
307
303
string helpText ;
308
304
HelpOptionAttribute . InvokeMethod ( options , pair , out helpText ) ;
@@ -311,19 +307,19 @@ private bool DoParseArguments(string[] args, object options)
311
307
}
312
308
313
309
return true ;
314
- }
315
-
316
- return DoParseArgumentsCore ( context ) ;
310
+ }
311
+
312
+ return DoParseArgumentsCore ( args , options ) ;
317
313
}
318
314
319
- private bool DoParseArgumentsCore ( ParserContext context )
315
+ private bool DoParseArgumentsCore ( string [ ] args , object options )
320
316
{
321
317
var hadError = false ;
322
- var optionMap = OptionMap . Create ( context . Target , Settings ) ;
318
+ var optionMap = OptionMap . Create ( options , Settings ) ;
323
319
optionMap . SetDefaults ( ) ;
324
- var valueMapper = new ValueMapper ( context . Target , Settings . ParsingCulture ) ;
320
+ var valueMapper = new ValueMapper ( options , Settings . ParsingCulture ) ;
325
321
326
- var arguments = new StringArrayEnumerator ( context . Arguments ) ;
322
+ var arguments = new StringArrayEnumerator ( args ) ;
327
323
while ( arguments . MoveNext ( ) )
328
324
{
329
325
var argument = arguments . Current ;
@@ -335,10 +331,10 @@ private bool DoParseArgumentsCore(ParserContext context)
335
331
var parser = ArgumentParser . Create ( argument , Settings . IgnoreUnknownArguments ) ;
336
332
if ( parser != null )
337
333
{
338
- var result = parser . Parse ( arguments , optionMap , context . Target ) ;
334
+ var result = parser . Parse ( arguments , optionMap , options ) ;
339
335
if ( ( result & PresentParserState . Failure ) == PresentParserState . Failure )
340
336
{
341
- SetParserStateIfNeeded ( context . Target , parser . PostParsingState ) ;
337
+ SetParserStateIfNeeded ( options , parser . PostParsingState ) ;
342
338
hadError = true ;
343
339
continue ;
344
340
}
@@ -362,54 +358,54 @@ private bool DoParseArgumentsCore(ParserContext context)
362
358
return ! hadError ;
363
359
}
364
360
365
- private bool DoParseArgumentsVerbs ( ParserContext context , ref object verbInstance )
361
+ private bool DoParseArgumentsVerbs ( string [ ] args , object options , ref object verbInstance )
366
362
{
367
- var verbs = ReflectionUtil . RetrievePropertyList < VerbOptionAttribute > ( context . Target ) ;
368
- var helpInfo = ReflectionUtil . RetrieveMethod < HelpVerbOptionAttribute > ( context . Target ) ;
369
- if ( context . HasNoArguments ( ) )
363
+ var verbs = ReflectionUtil . RetrievePropertyList < VerbOptionAttribute > ( options ) ;
364
+ var helpInfo = ReflectionUtil . RetrieveMethod < HelpVerbOptionAttribute > ( options ) ;
365
+ if ( args . Length == 0 )
370
366
{
371
367
if ( helpInfo != null || Settings . HelpWriter != null )
372
368
{
373
- DisplayHelpVerbText ( context . Target , helpInfo , null ) ;
369
+ DisplayHelpVerbText ( options , helpInfo , null ) ;
374
370
}
375
371
376
372
return false ;
377
373
}
378
374
379
- var optionMap = OptionMap . Create ( context . Target , verbs , Settings ) ;
375
+ var optionMap = OptionMap . Create ( options , verbs , Settings ) ;
380
376
381
377
// Read the verb from command line arguments
382
- if ( TryParseHelpVerb ( context . Arguments , context . Target , helpInfo , optionMap ) )
378
+ if ( TryParseHelpVerb ( args , options , helpInfo , optionMap ) )
383
379
{
384
380
// Since user requested help, parsing is considered a fail
385
381
return false ;
386
382
}
387
383
388
- var verbOption = optionMap [ context . FirstArgument ] ;
384
+ var verbOption = optionMap [ args . First ( ) ] ;
389
385
390
386
// User invoked a bad verb name
391
387
if ( verbOption == null )
392
388
{
393
389
if ( helpInfo != null )
394
390
{
395
- DisplayHelpVerbText ( context . Target , helpInfo , null ) ;
391
+ DisplayHelpVerbText ( options , helpInfo , null ) ;
396
392
}
397
393
398
394
return false ;
399
395
}
400
396
401
- verbInstance = verbOption . GetValue ( context . Target ) ;
397
+ verbInstance = verbOption . GetValue ( options ) ;
402
398
if ( verbInstance == null )
403
399
{
404
400
// Developer has not provided a default value and did not assign an instance
405
- verbInstance = verbOption . CreateInstance ( context . Target ) ;
406
- }
407
-
408
- var verbResult = DoParseArgumentsCore ( context . ToCoreInstance ( verbOption ) ) ;
401
+ verbInstance = verbOption . CreateInstance ( options ) ;
402
+ }
403
+
404
+ var verbResult = DoParseArgumentsCore ( args . Skip ( 1 ) . ToArray ( ) , verbInstance ) ;
409
405
if ( ! verbResult && helpInfo != null )
410
406
{
411
407
// Particular verb parsing failed, we try to print its help
412
- DisplayHelpVerbText ( context . Target , helpInfo , context . FirstArgument ) ;
408
+ DisplayHelpVerbText ( options , helpInfo , args . First ( ) ) ;
413
409
}
414
410
415
411
return verbResult ;
0 commit comments