@@ -184,6 +184,7 @@ impl<'a, 'b, T: Runtime> Matcher<'a, 'b, T> {
184184 & mut split_last_arg_at,
185185 combine_shorts,
186186 & signs,
187+ compgen,
187188 ) ;
188189 comp_option = Some ( param. id ( ) ) ;
189190 } else if let Some ( subcmd) = find_subcommand ( cmd, arg, & positional_args)
@@ -240,6 +241,7 @@ impl<'a, 'b, T: Runtime> Matcher<'a, 'b, T> {
240241 & mut split_last_arg_at,
241242 combine_shorts,
242243 & signs,
244+ compgen,
243245 ) ;
244246 comp_option = Some ( param. id ( ) ) ;
245247 }
@@ -1181,6 +1183,7 @@ fn take_value_args<'a>(
11811183 len : usize ,
11821184 signs : & str ,
11831185 assigned : bool ,
1186+ compgen : bool ,
11841187) -> Vec < & ' a str > {
11851188 let mut output = vec ! [ ] ;
11861189 if assigned || len == 0 {
@@ -1189,7 +1192,9 @@ fn take_value_args<'a>(
11891192 let args_len = args. len ( ) ;
11901193 let end = ( start + len) . min ( args_len) ;
11911194 for ( i, arg) in args. iter ( ) . enumerate ( ) . take ( end) . skip ( start) {
1192- if arg. starts_with ( |c| signs. contains ( c) ) && ( arg. len ( ) > 1 || i == args_len - 1 ) {
1195+ if arg. starts_with ( |c| signs. contains ( c) )
1196+ && ( arg. len ( ) > 1 || ( compgen && i == args_len - 1 ) )
1197+ {
11931198 break ;
11941199 }
11951200 output. push ( arg. as_str ( ) ) ;
@@ -1239,6 +1244,7 @@ fn match_flag_option<'a, 'b>(
12391244 split_last_arg_at : & mut Option < usize > ,
12401245 combine_shorts : bool ,
12411246 signs : & str ,
1247+ compgen : bool ,
12421248) {
12431249 let arg = & args[ * arg_index] ;
12441250 if param. terminated ( ) {
@@ -1252,7 +1258,7 @@ fn match_flag_option<'a, 'b>(
12521258 } else if let Some ( prefix) = param. match_prefix ( arg) {
12531259 let args_len = args. len ( ) ;
12541260 let prefix_len = prefix. len ( ) ;
1255- let value_args = take_value_args ( args, * arg_index + 1 , 1 , signs, param. assigned ( ) ) ;
1261+ let value_args = take_value_args ( args, * arg_index + 1 , 1 , signs, param. assigned ( ) , compgen ) ;
12561262 let take_empty = value_args. is_empty ( ) ;
12571263 * arg_index += value_args. len ( ) ;
12581264 let values = if take_empty { vec ! [ "1" ] } else { value_args } ;
@@ -1266,7 +1272,14 @@ fn match_flag_option<'a, 'b>(
12661272 } else {
12671273 let values_max = param. num_args ( ) . 1 ;
12681274 let args_len = args. len ( ) ;
1269- let value_args = take_value_args ( args, * arg_index + 1 , values_max, signs, param. assigned ( ) ) ;
1275+ let value_args = take_value_args (
1276+ args,
1277+ * arg_index + 1 ,
1278+ values_max,
1279+ signs,
1280+ param. assigned ( ) ,
1281+ compgen,
1282+ ) ;
12701283 * arg_index += value_args. len ( ) ;
12711284 if * arg_index == args_len - 1 {
12721285 if * arg_comp != ArgComp :: FlagOrOption {
0 commit comments