1
1
macro_rules! remove_overriden {
2
2
( @remove $_self: ident, $v: ident, $a: ident. $ov: ident) => {
3
- if let Some ( ref ora) = $a. $ov {
3
+ if let Some ( ref ora) = $a. $ov( ) {
4
4
vec_remove_all!( $_self. $v, ora) ;
5
5
}
6
6
} ;
@@ -11,11 +11,11 @@ macro_rules! remove_overriden {
11
11
} ;
12
12
( $_self: ident, $name: expr) => {
13
13
debugln!( "macro=remove_overriden!;" ) ;
14
- if let Some ( ref o) = $_self. opts. iter( ) . filter( |o| o. name == * $name) . next( ) {
14
+ if let Some ( ref o) = $_self. opts. iter( ) . filter( |o| o. b . name == * $name) . next( ) {
15
15
remove_overriden!( @arg $_self, o) ;
16
- } else if let Some ( ref f) = $_self. flags. iter( ) . filter( |f| f. name == * $name) . next( ) {
16
+ } else if let Some ( ref f) = $_self. flags. iter( ) . filter( |f| f. b . name == * $name) . next( ) {
17
17
remove_overriden!( @arg $_self, f) ;
18
- } else if let Some ( p) = $_self. positionals. values( ) . filter( |p| p. name == * $name) . next( ) {
18
+ } else if let Some ( p) = $_self. positionals. values( ) . filter( |p| p. b . name == * $name) . next( ) {
19
19
remove_overriden!( @arg $_self, p) ;
20
20
}
21
21
} ;
@@ -55,20 +55,7 @@ macro_rules! arg_post_processing {
55
55
if $matcher. contains( c) {
56
56
sdebugln!( "Yes" ) ;
57
57
// find who blacklisted us...
58
- $me. blacklist. push( & $arg. name) ;
59
- // if let Some(f) = $me.find_flag_mut(c) {
60
- // if let Some(ref mut bl) = f.blacklist {
61
- // bl.push(&$arg.name);
62
- // }
63
- // } else if let Some(o) = $me.find_option_mut(c) {
64
- // if let Some(ref mut bl) = o.blacklist {
65
- // bl.push(&$arg.name);
66
- // }
67
- // } else if let Some(p) = $me.find_positional_mut(c) {
68
- // if let Some(ref mut bl) = p.blacklist {
69
- // bl.push(&$arg.name);
70
- // }
71
- // }
58
+ $me. blacklist. push( & $arg. b. name) ;
72
59
} else {
73
60
sdebugln!( "No" ) ;
74
61
}
@@ -130,7 +117,7 @@ macro_rules! _handle_group_reqs{
130
117
macro_rules! validate_multiples {
131
118
( $_self: ident, $a: ident, $m: ident) => {
132
119
debugln!( "macro=validate_multiples!;" ) ;
133
- if $m. contains( & $a. name) && !$a. settings. is_set( ArgSettings :: Multiple ) {
120
+ if $m. contains( & $a. b . name) && !$a. b . settings. is_set( ArgSettings :: Multiple ) {
134
121
// Not the first time, and we don't allow multiples
135
122
return Err ( Error :: unexpected_multiple_usage( $a,
136
123
& * $_self. create_current_usage( $m) ,
@@ -159,12 +146,12 @@ macro_rules! parse_positional {
159
146
return Err ( e) ;
160
147
}
161
148
162
- $matcher. inc_occurrence_of( $p. name) ;
163
- let _ = $_self. groups_for_arg( $p. name)
149
+ $matcher. inc_occurrence_of( $p. b . name) ;
150
+ let _ = $_self. groups_for_arg( $p. b . name)
164
151
. and_then( |vec| Some ( $matcher. inc_occurrences_of( & * vec) ) ) ;
165
152
arg_post_processing!( $_self, $p, $matcher) ;
166
153
// Only increment the positional counter if it doesn't allow multiples
167
- if !$p. settings. is_set( ArgSettings :: Multiple ) {
154
+ if !$p. b . settings. is_set( ArgSettings :: Multiple ) {
168
155
$pos_counter += 1 ;
169
156
}
170
157
} ;
@@ -174,24 +161,24 @@ macro_rules! find_from {
174
161
( $_self: ident, $arg_name: expr, $from: ident, $matcher: expr) => { {
175
162
let mut ret = None ;
176
163
for k in $matcher. arg_names( ) {
177
- if let Some ( f) = $_self. find_flag ( k ) {
178
- if let Some ( ref v) = f. $from {
164
+ if let Some ( f) = find_by_name! ( $_self, & k , flags , iter ) {
165
+ if let Some ( ref v) = f. $from( ) {
179
166
if v. contains( $arg_name) {
180
167
ret = Some ( f. to_string( ) ) ;
181
168
}
182
169
}
183
170
}
184
- if let Some ( o) = $_self. find_option ( k ) {
185
- if let Some ( ref v) = o. $from {
171
+ if let Some ( o) = find_by_name! ( $_self, & k , opts , iter ) {
172
+ if let Some ( ref v) = o. $from( ) {
186
173
if v. contains( & $arg_name) {
187
174
ret = Some ( o. to_string( ) ) ;
188
175
}
189
176
}
190
177
}
191
- if let Some ( pos) = $_self. find_positional ( k ) {
192
- if let Some ( ref v) = pos. $from {
178
+ if let Some ( pos) = find_by_name! ( $_self, & k , positionals , values ) {
179
+ if let Some ( ref v) = pos. $from( ) {
193
180
if v. contains( $arg_name) {
194
- ret = Some ( pos. name. to_owned( ) ) ;
181
+ ret = Some ( pos. b . name. to_owned( ) ) ;
195
182
}
196
183
}
197
184
}
@@ -204,28 +191,54 @@ macro_rules! find_name_from {
204
191
( $_self: ident, $arg_name: expr, $from: ident, $matcher: expr) => { {
205
192
let mut ret = None ;
206
193
for k in $matcher. arg_names( ) {
207
- if let Some ( f) = $_self. find_flag ( k ) {
208
- if let Some ( ref v) = f. $from {
194
+ if let Some ( f) = find_by_name! ( $_self, & k , flags , iter ) {
195
+ if let Some ( ref v) = f. $from( ) {
209
196
if v. contains( $arg_name) {
210
- ret = Some ( f. name) ;
197
+ ret = Some ( f. b . name) ;
211
198
}
212
199
}
213
200
}
214
- if let Some ( o) = $_self. find_option ( k ) {
215
- if let Some ( ref v) = o. $from {
201
+ if let Some ( o) = find_by_name! ( $_self, & k , opts , iter ) {
202
+ if let Some ( ref v) = o. $from( ) {
216
203
if v. contains( & $arg_name) {
217
- ret = Some ( o. name) ;
204
+ ret = Some ( o. b . name) ;
218
205
}
219
206
}
220
207
}
221
- if let Some ( pos) = $_self. find_positional ( k ) {
222
- if let Some ( ref v) = pos. $from {
208
+ if let Some ( pos) = find_by_name! ( $_self, & k , positionals , values ) {
209
+ if let Some ( ref v) = pos. $from( ) {
223
210
if v. contains( $arg_name) {
224
- ret = Some ( pos. name) ;
211
+ ret = Some ( pos. b . name) ;
225
212
}
226
213
}
227
214
}
228
215
}
229
216
ret
230
217
} } ;
231
- }
218
+ }
219
+
220
+ // Finds an option by name
221
+ macro_rules! find_by_name {
222
+ ( $_self: ident, $name: expr, $what: ident, $how: ident) => {
223
+ $_self. $what. $how( ) . find( |o| & o. b. name == $name)
224
+ }
225
+ }
226
+
227
+ // Finds an option including if it's aliasesed
228
+ macro_rules! find_by_long {
229
+ ( $_self: ident, $long: expr, $what: ident) => {
230
+ $_self. $what
231
+ . iter( )
232
+ . filter( |o| o. s. long. is_some( ) )
233
+ . find( |o| {
234
+ &&o. s. long. unwrap( ) == & $long ||
235
+ ( o. s. aliases. is_some( ) &&
236
+ o. s
237
+ . aliases
238
+ . as_ref( )
239
+ . unwrap( )
240
+ . iter( )
241
+ . any( |& ( alias, _) | &&alias == & $long) )
242
+ } )
243
+ }
244
+ }
0 commit comments