@@ -96,7 +96,7 @@ impl<'a, 'b> Default for Arg<'a, 'b> {
96
96
validator : None ,
97
97
overrides : None ,
98
98
settings : ArgFlags :: new ( ) ,
99
- val_delim : Some ( ',' ) ,
99
+ val_delim : None ,
100
100
default_val : None ,
101
101
disp_ord : 999 ,
102
102
r_unless : None ,
@@ -1277,8 +1277,12 @@ impl<'a, 'b> Arg<'a, 'b> {
1277
1277
/// [option]: ./struct.Arg.html#method.takes_value
1278
1278
/// [`Arg::number_of_values(1)`]: ./struct.Arg.html#method.number_of_values
1279
1279
/// [`Arg::multiple(true)`]: ./struct.Arg.html#method.multiple
1280
- pub fn multiple ( self , multi : bool ) -> Self {
1280
+ pub fn multiple ( mut self , multi : bool ) -> Self {
1281
1281
if multi {
1282
+ if self . settings . is_set ( ArgSettings :: ValueDelimiterNotSet ) &&
1283
+ self . settings . is_set ( ArgSettings :: TakesValue ) {
1284
+ self = self . use_delimiter ( true ) ;
1285
+ }
1282
1286
self . set ( ArgSettings :: Multiple )
1283
1287
} else {
1284
1288
self . unset ( ArgSettings :: Multiple )
@@ -1649,6 +1653,13 @@ impl<'a, 'b> Arg<'a, 'b> {
1649
1653
/// ```
1650
1654
/// [`Arg::multiple(true)`]: ./struct.Arg.html#method.multiple
1651
1655
pub fn number_of_values ( mut self , qty : u64 ) -> Self {
1656
+ if qty > 1 && self . settings . is_set ( ArgSettings :: ValueDelimiterNotSet ) {
1657
+ self . unsetb ( ArgSettings :: ValueDelimiterNotSet ) ;
1658
+ self . setb ( ArgSettings :: UseValueDelimiter ) ;
1659
+ } else {
1660
+ self = self . use_delimiter ( false ) ;
1661
+ }
1662
+ self . setb ( ArgSettings :: TakesValue ) ;
1652
1663
self . num_vals = Some ( qty) ;
1653
1664
self
1654
1665
}
@@ -1747,6 +1758,13 @@ impl<'a, 'b> Arg<'a, 'b> {
1747
1758
/// ```
1748
1759
/// [`Arg::multiple(true)`]: ./struct.Arg.html#method.multiple
1749
1760
pub fn max_values ( mut self , qty : u64 ) -> Self {
1761
+ if qty > 1 && self . settings . is_set ( ArgSettings :: ValueDelimiterNotSet ) {
1762
+ self . unsetb ( ArgSettings :: ValueDelimiterNotSet ) ;
1763
+ self . setb ( ArgSettings :: UseValueDelimiter ) ;
1764
+ } else {
1765
+ self = self . use_delimiter ( false ) ;
1766
+ }
1767
+ self . setb ( ArgSettings :: TakesValue ) ;
1750
1768
self . max_vals = Some ( qty) ;
1751
1769
self
1752
1770
}
@@ -1857,11 +1875,16 @@ impl<'a, 'b> Arg<'a, 'b> {
1857
1875
/// [`Arg::value_delimiter`]: ./struct.Arg.html#method.value_delimiter
1858
1876
pub fn use_delimiter ( mut self , d : bool ) -> Self {
1859
1877
if d {
1860
- self . val_delim = Some ( ',' ) ;
1861
- self . set ( ArgSettings :: UseValueDelimiter )
1878
+ if self . val_delim . is_none ( ) {
1879
+ self . val_delim = Some ( ',' ) ;
1880
+ }
1881
+ self . setb ( ArgSettings :: TakesValue ) ;
1882
+ self . setb ( ArgSettings :: UseValueDelimiter ) ;
1883
+ self . unset ( ArgSettings :: ValueDelimiterNotSet )
1862
1884
} else {
1863
1885
self . val_delim = None ;
1864
- self . unset ( ArgSettings :: UseValueDelimiter )
1886
+ self . unsetb ( ArgSettings :: UseValueDelimiter ) ;
1887
+ self . unset ( ArgSettings :: ValueDelimiterNotSet )
1865
1888
}
1866
1889
}
1867
1890
@@ -1939,6 +1962,7 @@ impl<'a, 'b> Arg<'a, 'b> {
1939
1962
/// ```
1940
1963
pub fn require_delimiter ( mut self , d : bool ) -> Self {
1941
1964
if d {
1965
+ self . unsetb ( ArgSettings :: ValueDelimiterNotSet ) ;
1942
1966
self . setb ( ArgSettings :: UseValueDelimiter ) ;
1943
1967
self . set ( ArgSettings :: RequireDelimiter )
1944
1968
} else {
@@ -1972,8 +1996,9 @@ impl<'a, 'b> Arg<'a, 'b> {
1972
1996
/// [`Arg::use_delimiter(true)`]: ./struct.Arg.html#method.use_delimiter
1973
1997
/// [`Arg::takes_value(true)`]: ./struct.Arg.html#method.takes_value
1974
1998
pub fn value_delimiter ( mut self , d : & str ) -> Self {
1975
- self = self . set ( ArgSettings :: TakesValue ) ;
1976
- self = self . set ( ArgSettings :: UseValueDelimiter ) ;
1999
+ self . unsetb ( ArgSettings :: ValueDelimiterNotSet ) ;
2000
+ self . setb ( ArgSettings :: TakesValue ) ;
2001
+ self . setb ( ArgSettings :: UseValueDelimiter ) ;
1977
2002
self . val_delim = Some ( d. chars ( )
1978
2003
. nth ( 0 )
1979
2004
. expect ( "Failed to get value_delimiter from arg" ) ) ;
@@ -2041,6 +2066,10 @@ impl<'a, 'b> Arg<'a, 'b> {
2041
2066
/// [`Arg::multiple(true)`]: ./struct.Arg.html#method.multiple
2042
2067
pub fn value_names ( mut self , names : & [ & ' b str ] ) -> Self {
2043
2068
self . setb ( ArgSettings :: TakesValue ) ;
2069
+ if self . settings . is_set ( ArgSettings :: ValueDelimiterNotSet ) {
2070
+ self . unsetb ( ArgSettings :: ValueDelimiterNotSet ) ;
2071
+ self . setb ( ArgSettings :: UseValueDelimiter ) ;
2072
+ }
2044
2073
if let Some ( ref mut vals) = self . val_names {
2045
2074
let mut l = vals. len ( ) ;
2046
2075
for s in names {
0 commit comments