@@ -36,184 +36,98 @@ pub(super) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC
36
36
}
37
37
}
38
38
39
- fn keyword ( ctx : & CompletionContext , kw : & str , snippet : & str ) -> CompletionItem {
40
- let res = CompletionItem :: new ( CompletionKind :: Keyword , ctx. source_range ( ) , kw)
41
- . kind ( CompletionItemKind :: Keyword ) ;
42
-
43
- match ctx. config . snippet_cap {
44
- Some ( cap) => res. insert_snippet ( cap, snippet) ,
45
- _ => res. insert_text ( if snippet. contains ( '$' ) { kw } else { snippet } ) ,
46
- }
47
- . build ( )
48
- }
49
-
50
- fn add_keyword (
51
- ctx : & CompletionContext ,
52
- acc : & mut Completions ,
53
- kw : & str ,
54
- snippet : & str ,
55
- should_add : bool ,
56
- ) {
57
- if should_add {
58
- acc. add ( keyword ( ctx, kw, snippet) ) ;
59
- }
60
- }
61
-
62
39
pub ( super ) fn complete_expr_keyword ( acc : & mut Completions , ctx : & CompletionContext ) {
63
40
let has_trait_or_impl_parent = ctx. has_impl_parent || ctx. has_trait_parent ;
64
41
if ctx. trait_as_prev_sibling || ctx. impl_as_prev_sibling {
65
- add_keyword ( ctx, acc, "where" , "where " , true ) ;
42
+ add_keyword ( ctx, acc, "where" , "where " ) ;
66
43
return ;
67
44
}
68
45
if ctx. unsafe_is_prev {
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
- ) ;
76
- add_keyword (
77
- ctx,
78
- acc,
79
- "trait" ,
80
- "trait $0 {}" ,
81
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
82
- || ctx. block_expr_parent ,
83
- ) ;
84
- add_keyword (
85
- ctx,
86
- acc,
87
- "impl" ,
88
- "impl $0 {}" ,
89
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
90
- || ctx. block_expr_parent ,
91
- ) ;
46
+ if ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent {
47
+ add_keyword ( ctx, acc, "fn" , "fn $0() {}" )
48
+ }
49
+
50
+ if ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
51
+ || ctx. block_expr_parent
52
+ {
53
+ add_keyword ( ctx, acc, "trait" , "trait $0 {}" ) ;
54
+ add_keyword ( ctx, acc, "impl" , "impl $0 {}" ) ;
55
+ }
56
+
92
57
return ;
93
58
}
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
- ) ;
101
- add_keyword (
102
- ctx,
103
- acc,
104
- "use" ,
105
- "use " ,
106
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
107
- || ctx. block_expr_parent ,
108
- ) ;
109
- add_keyword (
110
- ctx,
111
- acc,
112
- "impl" ,
113
- "impl $0 {}" ,
114
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
115
- || ctx. block_expr_parent ,
116
- ) ;
117
- add_keyword (
118
- ctx,
119
- acc,
120
- "trait" ,
121
- "trait $0 {}" ,
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,
145
- ) ;
146
- add_keyword ( ctx, acc, "match" , "match $0 {}" , ctx. block_expr_parent || ctx. is_match_arm ) ;
147
- add_keyword ( ctx, acc, "loop" , "loop {$0}" , ctx. block_expr_parent || ctx. is_match_arm ) ;
148
- add_keyword ( ctx, acc, "while" , "while $0 {}" , ctx. block_expr_parent ) ;
149
- add_keyword ( ctx, acc, "let" , "let " , ctx. if_is_prev || ctx. block_expr_parent ) ;
150
- add_keyword ( ctx, acc, "if" , "if " , ctx. if_is_prev || ctx. block_expr_parent || ctx. is_match_arm ) ;
151
- add_keyword (
152
- ctx,
153
- acc,
154
- "if let" ,
155
- "if let " ,
156
- ctx. if_is_prev || ctx. block_expr_parent || ctx. is_match_arm ,
157
- ) ;
158
- add_keyword ( ctx, acc, "else" , "else {$0}" , ctx. after_if ) ;
159
- add_keyword ( ctx, acc, "else if" , "else if $0 {}" , ctx. after_if ) ;
160
- add_keyword (
161
- ctx,
162
- acc,
163
- "mod" ,
164
- "mod $0 {}" ,
165
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
166
- || ctx. block_expr_parent ,
167
- ) ;
168
- add_keyword ( ctx, acc, "mut" , "mut " , ctx. bind_pat_parent || ctx. ref_pat_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
- ) ;
183
- add_keyword (
184
- ctx,
185
- acc,
186
- "static" ,
187
- "static " ,
188
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
189
- || ctx. block_expr_parent ,
190
- ) ;
191
- add_keyword (
192
- ctx,
193
- acc,
194
- "extern" ,
195
- "extern " ,
196
- ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
197
- || ctx. block_expr_parent ,
198
- ) ;
199
- add_keyword (
200
- ctx,
201
- acc,
202
- "unsafe" ,
203
- "unsafe " ,
204
- ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent || ctx. is_match_arm ,
205
- ) ;
206
- add_keyword ( ctx, acc, "continue" , "continue;" , ctx. in_loop_body && ctx. can_be_stmt ) ;
207
- add_keyword ( ctx, acc, "break" , "break;" , ctx. in_loop_body && ctx. can_be_stmt ) ;
208
- add_keyword ( ctx, acc, "continue" , "continue" , ctx. in_loop_body && !ctx. can_be_stmt ) ;
209
- add_keyword ( ctx, acc, "break" , "break" , ctx. in_loop_body && !ctx. can_be_stmt ) ;
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
- ) ;
59
+ if ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent {
60
+ add_keyword ( ctx, acc, "fn" , "fn $0() {}" ) ;
61
+ }
62
+ if ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
63
+ || ctx. block_expr_parent
64
+ {
65
+ add_keyword ( ctx, acc, "use" , "use " ) ;
66
+ add_keyword ( ctx, acc, "impl" , "impl $0 {}" ) ;
67
+ add_keyword ( ctx, acc, "trait" , "trait $0 {}" ) ;
68
+ }
69
+
70
+ if ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent {
71
+ add_keyword ( ctx, acc, "enum" , "enum $0 {}" ) ;
72
+ add_keyword ( ctx, acc, "struct" , "struct $0 {}" ) ;
73
+ add_keyword ( ctx, acc, "union" , "union $0 {}" ) ;
74
+ }
75
+
76
+ if ctx. block_expr_parent || ctx. is_match_arm {
77
+ add_keyword ( ctx, acc, "match" , "match $0 {}" ) ;
78
+ add_keyword ( ctx, acc, "loop" , "loop {$0}" ) ;
79
+ }
80
+ if ctx. block_expr_parent {
81
+ add_keyword ( ctx, acc, "while" , "while $0 {}" ) ;
82
+ }
83
+ if ctx. if_is_prev || ctx. block_expr_parent {
84
+ add_keyword ( ctx, acc, "let" , "let " ) ;
85
+ }
86
+ if ctx. if_is_prev || ctx. block_expr_parent || ctx. is_match_arm {
87
+ add_keyword ( ctx, acc, "if" , "if " ) ;
88
+ add_keyword ( ctx, acc, "if let" , "if let " ) ;
89
+ }
90
+ if ctx. after_if {
91
+ add_keyword ( ctx, acc, "else" , "else {$0}" ) ;
92
+ add_keyword ( ctx, acc, "else if" , "else if $0 {}" ) ;
93
+ }
94
+ if ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
95
+ || ctx. block_expr_parent
96
+ {
97
+ add_keyword ( ctx, acc, "mod" , "mod $0 {}" ) ;
98
+ }
99
+ if ctx. bind_pat_parent || ctx. ref_pat_parent {
100
+ add_keyword ( ctx, acc, "mut" , "mut " ) ;
101
+ }
102
+ if ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent {
103
+ add_keyword ( ctx, acc, "const" , "const " ) ;
104
+ add_keyword ( ctx, acc, "type" , "type " ) ;
105
+ }
106
+ if ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
107
+ || ctx. block_expr_parent
108
+ {
109
+ add_keyword ( ctx, acc, "static" , "static " ) ;
110
+ } ;
111
+ if ( ctx. has_item_list_or_source_file_parent && !has_trait_or_impl_parent)
112
+ || ctx. block_expr_parent
113
+ {
114
+ add_keyword ( ctx, acc, "extern" , "extern " ) ;
115
+ }
116
+ if ctx. has_item_list_or_source_file_parent || ctx. block_expr_parent || ctx. is_match_arm {
117
+ add_keyword ( ctx, acc, "unsafe" , "unsafe " ) ;
118
+ }
119
+ if ctx. in_loop_body {
120
+ if ctx. can_be_stmt {
121
+ add_keyword ( ctx, acc, "continue" , "continue;" ) ;
122
+ add_keyword ( ctx, acc, "break" , "break;" ) ;
123
+ } else {
124
+ add_keyword ( ctx, acc, "continue" , "continue" ) ;
125
+ add_keyword ( ctx, acc, "break" , "break" ) ;
126
+ }
127
+ }
128
+ if ctx. has_item_list_or_source_file_parent && !ctx. has_trait_parent {
129
+ add_keyword ( ctx, acc, "pub" , "pub " )
130
+ }
217
131
218
132
if !ctx. is_trivial_path {
219
133
return ;
@@ -225,6 +139,21 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
225
139
acc. add_all ( complete_return ( ctx, & fn_def, ctx. can_be_stmt ) ) ;
226
140
}
227
141
142
+ fn keyword ( ctx : & CompletionContext , kw : & str , snippet : & str ) -> CompletionItem {
143
+ let res = CompletionItem :: new ( CompletionKind :: Keyword , ctx. source_range ( ) , kw)
144
+ . kind ( CompletionItemKind :: Keyword ) ;
145
+
146
+ match ctx. config . snippet_cap {
147
+ Some ( cap) => res. insert_snippet ( cap, snippet) ,
148
+ _ => res. insert_text ( if snippet. contains ( '$' ) { kw } else { snippet } ) ,
149
+ }
150
+ . build ( )
151
+ }
152
+
153
+ fn add_keyword ( ctx : & CompletionContext , acc : & mut Completions , kw : & str , snippet : & str ) {
154
+ acc. add ( keyword ( ctx, kw, snippet) ) ;
155
+ }
156
+
228
157
fn complete_return (
229
158
ctx : & CompletionContext ,
230
159
fn_def : & ast:: FnDef ,
0 commit comments