File tree Expand file tree Collapse file tree 3 files changed +29
-12
lines changed Expand file tree Collapse file tree 3 files changed +29
-12
lines changed Original file line number Diff line number Diff line change @@ -371,6 +371,21 @@ impl ArgAction {
371371        } 
372372    } 
373373
374+     #[ cfg( debug_assertions) ]  
375+     pub ( crate )  fn  max_num_args ( & self )  -> ValueRange  { 
376+         match  self  { 
377+             Self :: Set  => ValueRange :: FULL , 
378+             Self :: Append  => ValueRange :: FULL , 
379+             Self :: SetTrue  => ValueRange :: EMPTY , 
380+             Self :: SetFalse  => ValueRange :: EMPTY , 
381+             Self :: Count  => ValueRange :: EMPTY , 
382+             Self :: Help  => ValueRange :: EMPTY , 
383+             Self :: HelpShort  => ValueRange :: EMPTY , 
384+             Self :: HelpLong  => ValueRange :: EMPTY , 
385+             Self :: Version  => ValueRange :: EMPTY , 
386+         } 
387+     } 
388+ 
374389    pub ( crate )  fn  default_num_args ( & self )  -> ValueRange  { 
375390        match  self  { 
376391            Self :: Set  => ValueRange :: SINGLE , 
Original file line number Diff line number Diff line change @@ -690,15 +690,14 @@ fn assert_arg(arg: &Arg) {
690690        arg. get_id( ) , 
691691    ) ; 
692692
693-     if  arg. is_takes_value_set ( )  { 
694-         assert ! ( 
695-             arg. get_action( ) . takes_values( ) , 
696-             "Argument `{}`'s action {:?} is incompatible with `num_args({:?})`" , 
697-             arg. get_id( ) , 
698-             arg. get_action( ) , 
699-             arg. get_num_args( ) . unwrap_or( 1 . into( ) ) 
700-         ) ; 
701-     } 
693+     assert ! ( 
694+         arg. get_num_args( ) . unwrap_or( 1 . into( ) ) . max_values( ) 
695+             <= arg. get_action( ) . max_num_args( ) . max_values( ) , 
696+         "Argument `{}`'s action {:?} is incompatible with `num_args({:?})`" , 
697+         arg. get_id( ) , 
698+         arg. get_action( ) , 
699+         arg. get_num_args( ) . unwrap_or( 1 . into( ) ) 
700+     ) ; 
702701    if  let  Some ( action_type_id)  = arg. get_action ( ) . value_type_id ( )  { 
703702        assert_eq ! ( 
704703            action_type_id, 
Original file line number Diff line number Diff line change @@ -18,6 +18,11 @@ impl ValueRange {
1818        end_inclusive :  1 , 
1919    } ; 
2020
21+     pub ( crate )  const  FULL :  Self  = Self  { 
22+         start_inclusive :  0 , 
23+         end_inclusive :  usize:: MAX , 
24+     } ; 
25+ 
2126    /// Create a range 
2227/// 
2328/// # Panics 
@@ -135,9 +140,7 @@ impl From<std::ops::Range<usize>> for ValueRange {
135140
136141impl  From < std:: ops:: RangeFull >  for  ValueRange  { 
137142    fn  from ( _:  std:: ops:: RangeFull )  -> Self  { 
138-         let  start_inclusive = 0 ; 
139-         let  end_inclusive = usize:: MAX ; 
140-         Self :: raw ( start_inclusive,  end_inclusive) 
143+         Self :: FULL 
141144    } 
142145} 
143146
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments