@@ -76,8 +76,6 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
76
76
add_keyword ( ctx, acc, "else if" , "else if $0 {}" , ctx. after_if ) ;
77
77
add_keyword ( ctx, acc, "mod" , "mod $0 {}" , ctx. is_new_item || ctx. block_expr_parent ) ;
78
78
add_keyword ( ctx, acc, "mut" , "mut " , ctx. bind_pat_parent || ctx. ref_pat_parent ) ;
79
- add_keyword ( ctx, acc, "true" , "true" , !ctx. is_new_item ) ; // this should be defined properly
80
- add_keyword ( ctx, acc, "false" , "false" , !ctx. is_new_item ) ; // this should be defined properly
81
79
add_keyword ( ctx, acc, "const" , "const " , ctx. is_new_item || ctx. block_expr_parent ) ;
82
80
add_keyword ( ctx, acc, "type" , "type " , ctx. is_new_item || ctx. block_expr_parent ) ;
83
81
add_keyword ( ctx, acc, "static" , "static " , ctx. is_new_item || ctx. block_expr_parent ) ;
@@ -89,7 +87,6 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
89
87
add_keyword ( ctx, acc, "break" , "break" , ctx. in_loop_body && !ctx. can_be_stmt ) ;
90
88
add_keyword ( ctx, acc, "pub" , "pub " , ctx. is_new_item && !ctx. inside_trait ) ;
91
89
add_keyword ( ctx, acc, "where" , "where " , ctx. trait_as_prev_sibling || ctx. impl_as_prev_sibling ) ;
92
- complete_use_tree_keyword ( acc, ctx) ;
93
90
94
91
let fn_def = match & ctx. function_syntax {
95
92
Some ( it) => it,
@@ -114,13 +111,51 @@ fn complete_return(
114
111
115
112
#[ cfg( test) ]
116
113
mod tests {
117
- use crate :: completion:: { test_utils:: do_completion, CompletionItem , CompletionKind } ;
114
+ use crate :: {
115
+ completion:: {
116
+ test_utils:: { do_completion, do_completion_with_position} ,
117
+ CompletionItem , CompletionKind ,
118
+ } ,
119
+ CompletionItemKind ,
120
+ } ;
118
121
use insta:: assert_debug_snapshot;
122
+ use rustc_hash:: FxHashSet ;
119
123
120
124
fn do_keyword_completion ( code : & str ) -> Vec < CompletionItem > {
121
125
do_completion ( code, CompletionKind :: Keyword )
122
126
}
123
127
128
+ fn assert_completion_keyword ( code : & str , keywords : & [ ( & str , & str ) ] ) {
129
+ let ( position, completion_items) =
130
+ do_completion_with_position ( code, CompletionKind :: Keyword ) ;
131
+ let mut set = FxHashSet :: < ( String , String ) > :: default ( ) ;
132
+ for ( key, value) in keywords {
133
+ set. insert ( ( ( * key) . to_string ( ) , ( * value) . to_string ( ) ) ) ;
134
+ }
135
+
136
+ for item in completion_items {
137
+ assert ! ( item. text_edit( ) . len( ) == 1 ) ;
138
+ assert ! ( item. kind( ) == Some ( CompletionItemKind :: Keyword ) ) ;
139
+ let atom = item. text_edit ( ) . iter ( ) . next ( ) . unwrap ( ) . clone ( ) ;
140
+ assert ! ( atom. delete. start( ) == position. offset) ;
141
+ assert ! ( atom. delete. end( ) == position. offset) ;
142
+ let pair = ( item. label ( ) . to_string ( ) , atom. insert ) ;
143
+ assert ! ( set. contains( & pair) ) ;
144
+ set. remove ( & pair) ;
145
+ }
146
+ assert ! ( set. is_empty( ) ) ;
147
+ }
148
+
149
+ #[ test]
150
+ fn completes_keywords_in_use_stmt_new_approach ( ) {
151
+ assert_completion_keyword (
152
+ r"
153
+ use <|>
154
+ " ,
155
+ & [ ( "crate" , "crate::" ) , ( "self" , "self" ) , ( "super" , "super::" ) ] ,
156
+ ) ;
157
+ }
158
+
124
159
#[ test]
125
160
fn completes_keywords_in_use_stmt ( ) {
126
161
assert_debug_snapshot ! (
0 commit comments