3636use super :: Command ;
3737use crate :: { cache:: Cache , err:: Error , helper:: Digit } ;
3838use async_trait:: async_trait;
39- use clap:: { Arg , ArgMatches , Command as ClapCommand } ;
39+ use clap:: { Arg , ArgAction , ArgMatches , Command as ClapCommand } ;
4040/// Abstract `list` command
4141///
4242/// ## handler
@@ -72,56 +72,56 @@ static LIST_AFTER_HELP: &str = r#"EXAMPLES:
7272#[ async_trait]
7373impl Command for ListCommand {
7474 /// `list` command usage
75- fn usage < ' a > ( ) -> ClapCommand < ' a > {
75+ fn usage ( ) -> ClapCommand {
7676 ClapCommand :: new ( "list" )
7777 . about ( "List problems" )
7878 . visible_alias ( "l" )
7979 . arg (
80- Arg :: with_name ( "category" )
80+ Arg :: new ( "category" )
8181 . short ( 'c' )
8282 . long ( "category" )
83- . takes_value ( true )
83+ . num_args ( 1 )
8484 . help ( CATEGORY_HELP ) ,
8585 )
8686 . arg (
87- Arg :: with_name ( "plan" )
87+ Arg :: new ( "plan" )
8888 . short ( 'p' )
8989 . long ( "plan" )
90- . takes_value ( true )
90+ . num_args ( 1 )
9191 . help ( "Invoking python scripts to filter questions" ) ,
9292 )
9393 . arg (
94- Arg :: with_name ( "query" )
94+ Arg :: new ( "query" )
9595 . short ( 'q' )
9696 . long ( "query" )
97- . takes_value ( true )
97+ . num_args ( 1 )
9898 . help ( QUERY_HELP ) ,
9999 )
100100 . arg (
101- Arg :: with_name ( "range" )
101+ Arg :: new ( "range" )
102102 . short ( 'r' )
103103 . long ( "range" )
104- . takes_value ( true )
105- . min_values ( 2 )
104+ . num_args ( 2 ..)
106105 . help ( "Filter questions by id range" ) ,
107106 )
108107 . after_help ( LIST_AFTER_HELP )
109108 . arg (
110- Arg :: with_name ( "stat" )
109+ Arg :: new ( "stat" )
111110 . short ( 's' )
112111 . long ( "stat" )
113- . help ( "Show statistics of listed problems" ) ,
112+ . help ( "Show statistics of listed problems" )
113+ . action ( ArgAction :: SetTrue ) ,
114114 )
115115 . arg (
116- Arg :: with_name ( "tag" )
116+ Arg :: new ( "tag" )
117117 . short ( 't' )
118118 . long ( "tag" )
119- . takes_value ( true )
119+ . num_args ( 1 )
120120 . help ( "Filter questions by tag" ) ,
121121 )
122122 . arg (
123- Arg :: with_name ( "keyword" )
124- . takes_value ( true )
123+ Arg :: new ( "keyword" )
124+ . num_args ( 1 )
125125 . help ( "Keyword in select query" ) ,
126126 )
127127 }
@@ -156,26 +156,34 @@ impl Command for ListCommand {
156156 // filter tag
157157 if m. contains_id ( "tag" ) {
158158 let ids = cache
159- . get_tagged_questions ( m. value_of ( "tag" ) . unwrap_or ( "" ) )
159+ . get_tagged_questions ( m. get_one :: < String > ( "tag" ) . map ( |s| s . as_str ( ) ) . unwrap_or ( "" ) )
160160 . await ?;
161161 crate :: helper:: squash ( & mut ps, ids) ?;
162162 }
163163
164164 // filter category
165165 if m. contains_id ( "category" ) {
166- ps. retain ( |x| x. category == m. value_of ( "category" ) . unwrap_or ( "algorithms" ) ) ;
166+ ps. retain ( |x| {
167+ x. category
168+ == m. get_one :: < String > ( "category" )
169+ . map ( |s| s. as_str ( ) )
170+ . unwrap_or ( "algorithms" )
171+ } ) ;
167172 }
168173
169174 // filter query
170175 if m. contains_id ( "query" ) {
171- let query = m. value_of ( "query" ) . ok_or ( Error :: NoneError ) ?;
176+ let query = m
177+ . get_one :: < String > ( "query" )
178+ . map ( |s| s. as_str ( ) )
179+ . ok_or ( Error :: NoneError ) ?;
172180 crate :: helper:: filter ( & mut ps, query. to_string ( ) ) ;
173181 }
174182
175183 // filter range
176184 if m. contains_id ( "range" ) {
177185 let num_range: Vec < i32 > = m
178- . values_of ( "range" )
186+ . get_many :: < String > ( "range" )
179187 . ok_or ( Error :: NoneError ) ?
180188 . into_iter ( )
181189 . map ( |x| x. parse :: < i32 > ( ) . unwrap_or ( 0 ) )
@@ -184,7 +192,7 @@ impl Command for ListCommand {
184192 }
185193
186194 // retain if keyword exists
187- if let Some ( keyword) = m. value_of ( "keyword" ) {
195+ if let Some ( keyword) = m. get_one :: < String > ( "keyword" ) . map ( |s| s . as_str ( ) ) {
188196 let lowercase_kw = keyword. to_lowercase ( ) ;
189197 ps. retain ( |x| x. name . to_lowercase ( ) . contains ( & lowercase_kw) ) ;
190198 }
0 commit comments