@@ -66,48 +66,83 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
66
66
return ;
67
67
}
68
68
if ctx. unsafe_is_prev {
69
- add_keyword ( ctx, acc, "fn" , "fn $0() {}" , ctx. is_new_item || ctx. block_expr_parent ) ;
69
+ add_keyword (
70
+ ctx,
71
+ acc,
72
+ "fn" ,
73
+ "fn $0() {}" ,
74
+ ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent ,
75
+ ) ;
70
76
add_keyword (
71
77
ctx,
72
78
acc,
73
79
"trait" ,
74
80
"trait $0 {}" ,
75
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
81
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
82
+ || ctx. block_expr_parent ,
76
83
) ;
77
84
add_keyword (
78
85
ctx,
79
86
acc,
80
87
"impl" ,
81
88
"impl $0 {}" ,
82
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
89
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
90
+ || ctx. block_expr_parent ,
83
91
) ;
84
92
return ;
85
93
}
86
- add_keyword ( ctx, acc, "fn" , "fn $0() {}" , ctx. is_new_item || ctx. block_expr_parent ) ;
94
+ add_keyword (
95
+ ctx,
96
+ acc,
97
+ "fn" ,
98
+ "fn $0() {}" ,
99
+ ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent ,
100
+ ) ;
87
101
add_keyword (
88
102
ctx,
89
103
acc,
90
104
"use" ,
91
105
"use " ,
92
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
106
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
107
+ || ctx. block_expr_parent ,
93
108
) ;
94
109
add_keyword (
95
110
ctx,
96
111
acc,
97
112
"impl" ,
98
113
"impl $0 {}" ,
99
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
114
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
115
+ || ctx. block_expr_parent ,
100
116
) ;
101
117
add_keyword (
102
118
ctx,
103
119
acc,
104
120
"trait" ,
105
121
"trait $0 {}" ,
106
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
122
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
123
+ || ctx. block_expr_parent ,
124
+ ) ;
125
+ add_keyword (
126
+ ctx,
127
+ acc,
128
+ "enum" ,
129
+ "enum $0 {}" ,
130
+ ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
131
+ ) ;
132
+ add_keyword (
133
+ ctx,
134
+ acc,
135
+ "struct" ,
136
+ "struct $0 {}" ,
137
+ ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
138
+ ) ;
139
+ add_keyword (
140
+ ctx,
141
+ acc,
142
+ "union" ,
143
+ "union $0 {}" ,
144
+ ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent,
107
145
) ;
108
- add_keyword ( ctx, acc, "enum" , "enum $0 {}" , ctx. is_new_item && !has_trait_or_impl_parent) ;
109
- add_keyword ( ctx, acc, "struct" , "struct $0 {}" , ctx. is_new_item && !has_trait_or_impl_parent) ;
110
- add_keyword ( ctx, acc, "union" , "union $0 {}" , ctx. is_new_item && !has_trait_or_impl_parent) ;
111
146
add_keyword ( ctx, acc, "match" , "match $0 {}" , ctx. block_expr_parent || ctx. is_match_arm ) ;
112
147
add_keyword ( ctx, acc, "loop" , "loop {$0}" , ctx. block_expr_parent || ctx. is_match_arm ) ;
113
148
add_keyword ( ctx, acc, "while" , "while $0 {}" , ctx. block_expr_parent ) ;
@@ -127,37 +162,58 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
127
162
acc,
128
163
"mod" ,
129
164
"mod $0 {}" ,
130
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
165
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
166
+ || ctx. block_expr_parent ,
131
167
) ;
132
168
add_keyword ( ctx, acc, "mut" , "mut " , ctx. bind_pat_parent || ctx. ref_pat_parent ) ;
133
- add_keyword ( ctx, acc, "const" , "const " , ctx. is_new_item || ctx. block_expr_parent ) ;
134
- add_keyword ( ctx, acc, "type" , "type " , ctx. is_new_item || ctx. block_expr_parent ) ;
169
+ add_keyword (
170
+ ctx,
171
+ acc,
172
+ "const" ,
173
+ "const " ,
174
+ ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent ,
175
+ ) ;
176
+ add_keyword (
177
+ ctx,
178
+ acc,
179
+ "type" ,
180
+ "type " ,
181
+ ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent ,
182
+ ) ;
135
183
add_keyword (
136
184
ctx,
137
185
acc,
138
186
"static" ,
139
187
"static " ,
140
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
188
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
189
+ || ctx. block_expr_parent ,
141
190
) ;
142
191
add_keyword (
143
192
ctx,
144
193
acc,
145
194
"extern" ,
146
195
"extern " ,
147
- ( ctx. is_new_item && !has_trait_or_impl_parent) || ctx. block_expr_parent ,
196
+ ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
197
+ || ctx. block_expr_parent ,
148
198
) ;
149
199
add_keyword (
150
200
ctx,
151
201
acc,
152
202
"unsafe" ,
153
203
"unsafe " ,
154
- ctx. is_new_item || ctx. block_expr_parent || ctx. is_match_arm ,
204
+ ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent || ctx. is_match_arm ,
155
205
) ;
156
206
add_keyword ( ctx, acc, "continue" , "continue;" , ctx. in_loop_body && ctx. can_be_stmt ) ;
157
207
add_keyword ( ctx, acc, "break" , "break;" , ctx. in_loop_body && ctx. can_be_stmt ) ;
158
208
add_keyword ( ctx, acc, "continue" , "continue" , ctx. in_loop_body && !ctx. can_be_stmt ) ;
159
209
add_keyword ( ctx, acc, "break" , "break" , ctx. in_loop_body && !ctx. can_be_stmt ) ;
160
- add_keyword ( ctx, acc, "pub" , "pub " , ctx. is_new_item && !ctx. has_trait_parent ) ;
210
+ add_keyword (
211
+ ctx,
212
+ acc,
213
+ "pub" ,
214
+ "pub " ,
215
+ ctx. has_item_list_or_source_file_parent && !ctx. has_trait_parent ,
216
+ ) ;
161
217
162
218
if !ctx. is_trivial_path {
163
219
return ;
@@ -226,6 +282,31 @@ mod tests {
226
282
) ;
227
283
}
228
284
285
+ #[ test]
286
+ fn test_keywords_at_source_file_level ( ) {
287
+ assert_debug_snapshot ! (
288
+ get_keyword_completions( r"m<|>" ) ,
289
+ @r###"
290
+ [
291
+ "kw const",
292
+ "kw enum",
293
+ "kw extern",
294
+ "kw fn",
295
+ "kw impl",
296
+ "kw mod",
297
+ "kw pub",
298
+ "kw static",
299
+ "kw struct",
300
+ "kw trait",
301
+ "kw type",
302
+ "kw union",
303
+ "kw unsafe",
304
+ "kw use",
305
+ ]
306
+ "###
307
+ ) ;
308
+ }
309
+
229
310
#[ test]
230
311
fn test_keywords_in_function ( ) {
231
312
assert_debug_snapshot ! (
0 commit comments