@@ -128,31 +128,45 @@ fn main() {
128
128
println ! ( "{:<17}\t {:<46}\t {:<7}" , "Name" , "Path" , "Status" ) ;
129
129
}
130
130
let mut exercises_done: u16 = 0 ;
131
- let filters = filter. clone ( ) . unwrap_or_default ( ) . to_lowercase ( ) ;
132
- exercises. iter ( ) . for_each ( |e| {
133
- let fname = format ! ( "{}" , e. path. display( ) ) ;
131
+ let lowercase_filter = filter
132
+ . as_ref ( )
133
+ . map ( |s| s. to_lowercase ( ) )
134
+ . unwrap_or_default ( ) ;
135
+ let filters = lowercase_filter
136
+ . split ( ',' )
137
+ . filter_map ( |f| {
138
+ let f = f. trim ( ) ;
139
+ if f. is_empty ( ) {
140
+ None
141
+ } else {
142
+ Some ( f)
143
+ }
144
+ } )
145
+ . collect :: < Vec < _ > > ( ) ;
146
+
147
+ for exercise in & exercises {
148
+ let fname = format ! ( "{}" , exercise. path. display( ) ) ;
134
149
let filter_cond = filters
135
- . split ( ',' )
136
- . filter ( |f| !f. trim ( ) . is_empty ( ) )
137
- . any ( |f| e. name . contains ( f) || fname. contains ( f) ) ;
138
- let status = if e. looks_done ( ) {
150
+ . iter ( )
151
+ . any ( |f| exercise. name . contains ( f) || fname. contains ( f) ) ;
152
+ let status = if exercise. looks_done ( ) {
139
153
exercises_done += 1 ;
140
154
"Done"
141
155
} else {
142
156
"Pending"
143
157
} ;
144
158
let solve_cond = {
145
- ( e . looks_done ( ) && solved)
146
- || ( !e . looks_done ( ) && unsolved)
159
+ ( exercise . looks_done ( ) && solved)
160
+ || ( !exercise . looks_done ( ) && unsolved)
147
161
|| ( !solved && !unsolved)
148
162
} ;
149
163
if solve_cond && ( filter_cond || filter. is_none ( ) ) {
150
164
let line = if paths {
151
165
format ! ( "{fname}\n " )
152
166
} else if names {
153
- format ! ( "{}\n " , e . name)
167
+ format ! ( "{}\n " , exercise . name)
154
168
} else {
155
- format ! ( "{:<17}\t {fname:<46}\t {status:<7}\n " , e . name)
169
+ format ! ( "{:<17}\t {fname:<46}\t {status:<7}\n " , exercise . name)
156
170
} ;
157
171
// Somehow using println! leads to the binary panicking
158
172
// when its output is piped.
@@ -168,7 +182,8 @@ fn main() {
168
182
} ) ;
169
183
}
170
184
}
171
- } ) ;
185
+ }
186
+
172
187
let percentage_progress = exercises_done as f32 / exercises. len ( ) as f32 * 100.0 ;
173
188
println ! (
174
189
"Progress: You completed {} / {} exercises ({:.1} %)." ,
0 commit comments