@@ -96,7 +96,18 @@ impl Completer for DuvaHinter {
9696 if previous_words. len( ) > 0 && previous_words. len( ) <= suggestions. len( ) {
9797 candidates. push( new_pair!( suggestions[ previous_words. len( ) - 1 ] ) ) ;
9898 }
99- }
99+ } ;
100+ ( [ $( $args: expr) ,+] , repeat_last) => {
101+ let suggestions = [ $( $args) ,+] ;
102+ if previous_words. len( ) > 0 {
103+ let idx = if previous_words. len( ) <= suggestions. len( ) {
104+ previous_words. len( ) - 1
105+ } else {
106+ suggestions. len( ) - 1 // Keep repeating the last argument
107+ } ;
108+ candidates. push( new_pair!( suggestions[ idx] ) ) ;
109+ }
110+ } ;
100111 } ;
101112
102113 let command = previous_words[ 0 ] . to_lowercase ( ) ;
@@ -148,19 +159,10 @@ impl Completer for DuvaHinter {
148159 suggest_by_pos ! ( [ "key" , "decrement" ] ) ;
149160 } ,
150161 | "exists" | "del" | "mget" => {
151- if !previous_words. is_empty ( ) {
152- // Suggest "key" for these commands
153- candidates. push ( new_pair ! ( "key" ) ) ;
154- }
162+ suggest_by_pos ! ( [ "key" ] , repeat_last) ;
155163 } ,
156164 | "lpush" | "lpushx" | "rpush" | "rpushx" => {
157- if previous_words. len ( ) == 1 {
158- // Suggest "key" after set
159- candidates. push ( new_pair ! ( "key" ) ) ;
160- } else if previous_words. len ( ) > 1 {
161- // Suggest "value" after set key
162- candidates. push ( new_pair ! ( "value" ) ) ;
163- }
165+ suggest_by_pos ! ( [ "key" , "value" ] , repeat_last) ;
164166 } ,
165167 | "lpop" | "rpop" => {
166168 suggest_by_pos ! ( [ "key" , "count" ] ) ;
0 commit comments