@@ -177,103 +177,24 @@ fn render_resolution_(
177
177
let _p = profile:: span ( "render_resolution" ) ;
178
178
use hir:: ModuleDef :: * ;
179
179
180
- let db = ctx. db ( ) ;
181
- let ctx = ctx. import_to_add ( import_to_add) ;
182
- let kind = match resolution {
180
+ match resolution {
181
+ ScopeDef :: ModuleDef ( Macro ( mac) ) => {
182
+ let ctx = ctx. import_to_add ( import_to_add) ;
183
+ return render_macro ( ctx, local_name, mac) ;
184
+ }
183
185
ScopeDef :: ModuleDef ( Function ( func) ) => {
186
+ let ctx = ctx. import_to_add ( import_to_add) ;
184
187
return render_fn ( ctx, Some ( local_name) , func) ;
185
188
}
186
189
ScopeDef :: ModuleDef ( Variant ( var) ) if ctx. completion . pattern_ctx . is_none ( ) => {
187
- if let Some ( item ) = render_variant_lit ( ctx. clone ( ) , Some ( local_name . clone ( ) ) , var , None )
188
- {
190
+ let ctx = ctx. clone ( ) . import_to_add ( import_to_add . clone ( ) ) ;
191
+ if let Some ( item ) = render_variant_lit ( ctx , Some ( local_name . clone ( ) ) , var , None ) {
189
192
return item;
190
193
}
191
- CompletionItemKind :: SymbolKind ( SymbolKind :: Variant )
192
- }
193
- ScopeDef :: ModuleDef ( Macro ( mac) ) => return render_macro ( ctx, local_name, mac) ,
194
- ScopeDef :: Unknown => {
195
- let mut item = CompletionItem :: new (
196
- CompletionItemKind :: UnresolvedReference ,
197
- ctx. source_range ( ) ,
198
- local_name. to_smol_str ( ) ,
199
- ) ;
200
- if let Some ( import_to_add) = ctx. import_to_add {
201
- item. add_import ( import_to_add) ;
202
- }
203
- return item. build ( ) ;
204
- }
205
-
206
- ScopeDef :: ModuleDef ( Variant ( _) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: Variant ) ,
207
- ScopeDef :: ModuleDef ( Module ( ..) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: Module ) ,
208
- ScopeDef :: ModuleDef ( Adt ( adt) ) => CompletionItemKind :: SymbolKind ( match adt {
209
- hir:: Adt :: Struct ( _) => SymbolKind :: Struct ,
210
- hir:: Adt :: Union ( _) => SymbolKind :: Union ,
211
- hir:: Adt :: Enum ( _) => SymbolKind :: Enum ,
212
- } ) ,
213
- ScopeDef :: ModuleDef ( Const ( ..) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: Const ) ,
214
- ScopeDef :: ModuleDef ( Static ( ..) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: Static ) ,
215
- ScopeDef :: ModuleDef ( Trait ( ..) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: Trait ) ,
216
- ScopeDef :: ModuleDef ( TypeAlias ( ..) ) => CompletionItemKind :: SymbolKind ( SymbolKind :: TypeAlias ) ,
217
- ScopeDef :: ModuleDef ( BuiltinType ( ..) ) => CompletionItemKind :: BuiltinType ,
218
- ScopeDef :: GenericParam ( param) => CompletionItemKind :: SymbolKind ( match param {
219
- hir:: GenericParam :: TypeParam ( _) => SymbolKind :: TypeParam ,
220
- hir:: GenericParam :: ConstParam ( _) => SymbolKind :: ConstParam ,
221
- hir:: GenericParam :: LifetimeParam ( _) => SymbolKind :: LifetimeParam ,
222
- } ) ,
223
- ScopeDef :: Local ( ..) => CompletionItemKind :: SymbolKind ( SymbolKind :: Local ) ,
224
- ScopeDef :: Label ( ..) => CompletionItemKind :: SymbolKind ( SymbolKind :: Label ) ,
225
- ScopeDef :: AdtSelfType ( ..) | ScopeDef :: ImplSelfType ( ..) => {
226
- CompletionItemKind :: SymbolKind ( SymbolKind :: SelfParam )
227
- }
228
- } ;
229
-
230
- let local_name = local_name. to_smol_str ( ) ;
231
- let mut item = CompletionItem :: new ( kind, ctx. source_range ( ) , local_name. clone ( ) ) ;
232
- if let ScopeDef :: Local ( local) = resolution {
233
- let ty = local. ty ( db) ;
234
- if !ty. is_unknown ( ) {
235
- item. detail ( ty. display ( db) . to_string ( ) ) ;
236
- }
237
-
238
- item. set_relevance ( CompletionRelevance {
239
- type_match : compute_type_match ( ctx. completion , & ty) ,
240
- exact_name_match : compute_exact_name_match ( ctx. completion , & local_name) ,
241
- is_local : true ,
242
- ..CompletionRelevance :: default ( )
243
- } ) ;
244
-
245
- if let Some ( ref_match) = compute_ref_match ( ctx. completion , & ty) {
246
- item. ref_match ( ref_match) ;
247
- }
248
- } ;
249
-
250
- // Add `<>` for generic types
251
- let type_path_no_ty_args = matches ! (
252
- ctx. completion. path_context,
253
- Some ( PathCompletionCtx { kind: Some ( PathKind :: Type ) , has_type_args: false , .. } )
254
- ) && ctx. completion . config . add_call_parenthesis ;
255
- if type_path_no_ty_args {
256
- if let Some ( cap) = ctx. snippet_cap ( ) {
257
- let has_non_default_type_params = match resolution {
258
- ScopeDef :: ModuleDef ( Adt ( it) ) => it. has_non_default_type_params ( db) ,
259
- ScopeDef :: ModuleDef ( TypeAlias ( it) ) => it. has_non_default_type_params ( db) ,
260
- _ => false ,
261
- } ;
262
- if has_non_default_type_params {
263
- cov_mark:: hit!( inserts_angle_brackets_for_generics) ;
264
- item. lookup_by ( local_name. clone ( ) )
265
- . label ( SmolStr :: from_iter ( [ & local_name, "<…>" ] ) )
266
- . insert_snippet ( cap, format ! ( "{}<$0>" , local_name) ) ;
267
- }
268
194
}
195
+ _ => ( ) ,
269
196
}
270
- item. set_documentation ( scope_def_docs ( db, resolution) )
271
- . set_deprecated ( scope_def_is_deprecated ( & ctx, resolution) ) ;
272
-
273
- if let Some ( import_to_add) = ctx. import_to_add {
274
- item. add_import ( import_to_add) ;
275
- }
276
- item. build ( )
197
+ render_resolution_simple_ ( ctx, local_name, import_to_add, resolution)
277
198
}
278
199
279
200
fn render_resolution_simple_ (
0 commit comments