@@ -142,7 +142,7 @@ public function addArgsByRules(array $rules): void
142
142
/**
143
143
* Add and argument by rule
144
144
*
145
- * @param string|int $name
145
+ * @param string $name
146
146
* @param string|array $rule please see {@see argRules}
147
147
*
148
148
* @return $this
@@ -251,10 +251,11 @@ protected function parseRule($rule, string $name = '', int $index = 0, bool $isO
251
251
$ name = $ name ?: $ item ['name ' ];
252
252
if ($ isOption ) {
253
253
// parse option name.
254
- [$ name , $ shorts ] = $ this ->parseRuleOptName ($ name );
254
+ [$ name , $ shorts, $ aliases ] = $ this ->parseRuleOptName ($ name );
255
255
256
- // save alias
257
- $ item ['shorts ' ] = $ shorts ?: $ shortsFromRule ;
256
+ // save shorts and aliases
257
+ $ item ['shorts ' ] = $ shorts ?: $ shortsFromRule ;
258
+ $ item ['aliases ' ] = $ aliases ;
258
259
} else {
259
260
$ item ['index ' ] = $ index ;
260
261
}
@@ -268,7 +269,7 @@ protected function parseRule($rule, string $name = '', int $index = 0, bool $isO
268
269
*
269
270
* @param string $key 'lang,s' => option name is 'lang', alias 's'
270
271
*
271
- * @return array [name, shorts]
272
+ * @return array{string, array, array} [name, shorts, aliases ]
272
273
*/
273
274
protected function parseRuleOptName (string $ key ): array
274
275
{
@@ -278,26 +279,34 @@ protected function parseRuleOptName(string $key): array
278
279
}
279
280
280
281
// only name.
281
- if (strpos ($ key , ', ' ) === false ) {
282
+ if (! str_contains ($ key , ', ' )) {
282
283
$ name = ltrim ($ key , '- ' );
283
- return [$ name , []];
284
+ return [$ name , [], [] ];
284
285
}
285
286
286
287
$ name = '' ;
287
288
$ keys = Str::explode ($ key , ', ' );
288
289
289
- // TIP: first is the option name. remaining is shorts.
290
- $ shorts = [];
290
+ $ shorts = $ aliases = [];
291
291
foreach ($ keys as $ k ) {
292
292
// support like '--name, -n'
293
293
$ k = ltrim ($ k , '- ' );
294
294
295
- // long string as option name.
296
- if (!$ name && strlen ($ k ) > 1 ) {
297
- $ name = $ k ;
295
+ // max length string as option name.
296
+ if (($ kl = strlen ($ k )) > 1 ) {
297
+ if (!$ name ) {
298
+ $ name = $ k ;
299
+ } elseif ($ kl > strlen ($ name )) {
300
+ $ aliases [] = $ name ;
301
+ // update name
302
+ $ name = $ k ;
303
+ } else {
304
+ $ aliases [] = $ k ;
305
+ }
298
306
continue ;
299
307
}
300
308
309
+ // one char, as shorts
301
310
$ shorts [] = $ k ;
302
311
}
303
312
@@ -306,7 +315,7 @@ protected function parseRuleOptName(string $key): array
306
315
$ name = array_shift ($ shorts );
307
316
}
308
317
309
- return [$ name , $ shorts ];
318
+ return [$ name , $ shorts, $ aliases ];
310
319
}
311
320
312
321
/**
0 commit comments