@@ -190,7 +190,18 @@ bool CanBeUnbundled(string arg, out IReadOnlyList<string>? replacement)
190
190
{
191
191
replacement = null ;
192
192
193
- if ( arg . Length > 0 && arg [ 0 ] != '-' )
193
+ if ( arg . Length < 2 )
194
+ {
195
+ return false ;
196
+ }
197
+
198
+ if ( arg [ 0 ] != '-' )
199
+ {
200
+ return false ;
201
+ }
202
+
203
+ // don't unbundle if this is a known token
204
+ if ( knownTokens . ContainsKey ( arg ) )
194
205
{
195
206
return false ;
196
207
}
@@ -201,22 +212,30 @@ bool CanBeUnbundled(string arg, out IReadOnlyList<string>? replacement)
201
212
currentCommand ? . Children . GetByAlias ( lastToken . Value ) is IOption option &&
202
213
option . Argument . Arity . MinimumNumberOfValues > 0 )
203
214
{
204
- return false ;
215
+ return false ;
205
216
}
206
217
207
- // don't unbundle if this is a known option
208
- if ( knownTokens . ContainsKey ( arg ) ||
209
- knownTokens
210
- . SelectMany ( token => _argumentDelimiters . Select ( delimiter => token . Key + delimiter ) )
211
- . Any ( token => arg . Contains ( token ) ) )
218
+ // don't unbundle if arg contains an argument token, e.g. "value" in "-abc:value"
219
+ for ( var i = 0 ; i < _argumentDelimiters . Length ; i ++ )
212
220
{
213
- return false ;
214
- }
221
+ var delimiter = _argumentDelimiters [ i ] ;
222
+
223
+ if ( arg . Contains ( delimiter ) )
224
+ {
225
+ foreach ( var knownToken in knownTokens . Keys )
226
+ {
227
+ if ( arg . StartsWith ( knownToken + delimiter ) )
228
+ {
229
+ return false ;
230
+ }
231
+ }
232
+ }
233
+ }
215
234
216
- var ( prefix , alias ) = arg . SplitPrefix ( ) ;
235
+ // remove the leading "-"
236
+ var alias = arg . Substring ( 1 ) ;
217
237
218
- return prefix == "-" &&
219
- TryUnbundle ( out replacement ) ;
238
+ return TryUnbundle ( out replacement ) ;
220
239
221
240
Token ? TokenForOptionAlias ( char c )
222
241
{
0 commit comments