@@ -115,11 +115,11 @@ public async Task<FlowCommandResult> RunCommandAsync () {
115115 } ;
116116 }
117117
118- ParseParameters ( parts , out var command , out var parameters ) ;
118+ ParseParameters ( parts , out var command , out var parameters , out var defaultParameter ) ;
119119
120120 try {
121121 if ( m_commands . TryGetValue ( command , out var flowCommand ) ) {
122- flowCommand . Execute ( parameters , m_commandLineProvider ) ;
122+ flowCommand . Execute ( parameters , m_commandLineProvider , defaultParameter ) ;
123123
124124 return new FlowCommandResult {
125125 EmptyInput = string . IsNullOrEmpty ( m_commandLine ) ,
@@ -128,7 +128,7 @@ public async Task<FlowCommandResult> RunCommandAsync () {
128128 } ;
129129 }
130130 if ( m_asyncCommands . TryGetValue ( command , out var flowAsyncCommand ) ) {
131- await flowAsyncCommand . Execute ( parameters , m_commandLineProvider ) ;
131+ await flowAsyncCommand . Execute ( parameters , m_commandLineProvider , defaultParameter ) ;
132132 return new FlowCommandResult {
133133 EmptyInput = string . IsNullOrEmpty ( m_commandLine ) ,
134134 CommandHandled = true ,
@@ -174,11 +174,11 @@ public FlowCommandResult RunCommand () {
174174 } ;
175175 }
176176
177- ParseParameters ( parts , out var command , out var parameters ) ;
177+ ParseParameters ( parts , out var command , out var parameters , out var defaultParameter ) ;
178178
179179 try {
180180 if ( m_commands . TryGetValue ( command , out var flowCommand ) ) {
181- flowCommand . Execute ( parameters , m_commandLineProvider ) ;
181+ flowCommand . Execute ( parameters , m_commandLineProvider , defaultParameter ) ;
182182
183183 return new FlowCommandResult {
184184 EmptyInput = string . IsNullOrEmpty ( m_commandLine ) ,
@@ -212,6 +212,13 @@ public CommandLine AddOption ( string shortName = "", string fullName = "", stri
212212 return this ;
213213 }
214214
215+ public CommandLine AddOptions ( IEnumerable < FlowCommandParameter > parameters ) {
216+ m_options . AddRange ( parameters ) ;
217+
218+ return this ;
219+ }
220+
221+
215222 /// <summary>
216223 /// Run the command from the command line.
217224 /// </summary>
@@ -227,12 +234,12 @@ public CommandLine AddOption ( string shortName = "", string fullName = "", stri
227234 return default ;
228235 }
229236
230- ParseOptionParameters ( parts , out var parameters ) ;
237+ ParseOptionParameters ( parts , out var parameters , out var defaultParameter ) ;
231238
232239 var flowOptions = new FlowOptions < T > {
233240 Parameters = m_options
234241 } ;
235- return flowOptions . MapParametersToType ( parameters , m_commandLineProvider ) ;
242+ return flowOptions . MapParametersToType ( parameters , m_commandLineProvider , defaultParameter ) ;
236243 }
237244
238245 private void ShowCommandHelp ( string description , List < FlowCommandParameter > parameters ) {
@@ -416,10 +423,12 @@ private List<string> GetParts () {
416423
417424 private bool IsHelpParameter ( string part ) => part is "-h" or "--help" ;
418425
419- private static void ParseParameters ( List < string > parts , out string command , out Dictionary < string , string > parameters ) {
426+ public static void ParseParameters ( List < string > parts , out string command , out Dictionary < string , string > parameters , out string defaultParameter ) {
420427 command = parts . First ( ) . ToLowerInvariant ( ) ;
428+ var isHaveDefaultParameter = parts . Count > 1 && ! parts . ElementAt ( 1 ) . StartsWith ( "-" ) ;
429+ defaultParameter = isHaveDefaultParameter ? parts . ElementAt ( 1 ) : "" ;
421430 parameters = parts
422- . Skip ( 1 )
431+ . Skip ( isHaveDefaultParameter ? 2 : 1 )
423432 . Where ( a => ( a . StartsWith ( "-" ) && a . Length > 1 ) || ( a . StartsWith ( "--" ) && a . Length > 2 ) )
424433 . Select (
425434 a => {
@@ -433,8 +442,11 @@ private static void ParseParameters ( List<string> parts, out string command, ou
433442 . ToDictionary ( a => a . Name , a => a . Value ) ;
434443 }
435444
436- private static void ParseOptionParameters ( List < string > parts , out Dictionary < string , string > parameters ) {
445+ private static void ParseOptionParameters ( List < string > parts , out Dictionary < string , string > parameters , out string defaultParameter ) {
446+ var isHaveDefaultParameter = parts . Count > 1 && ! parts . ElementAt ( 0 ) . StartsWith ( "-" ) ;
447+ defaultParameter = isHaveDefaultParameter ? parts . ElementAt ( 0 ) : "" ;
437448 parameters = parts
449+ . Skip ( isHaveDefaultParameter ? 1 : 0 )
438450 . Where ( a => ( a . StartsWith ( "-" ) && a . Length > 1 ) || ( a . StartsWith ( "--" ) && a . Length > 2 ) )
439451 . Select (
440452 a => {
0 commit comments