aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src')
-rw-r--r--crates/ra_ide/src/completion/presentation.rs42
1 files changed, 18 insertions, 24 deletions
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs
index 6d8a5dc08..ab43d2a0a 100644
--- a/crates/ra_ide/src/completion/presentation.rs
+++ b/crates/ra_ide/src/completion/presentation.rs
@@ -307,42 +307,36 @@ impl Completions {
307 307
308pub(crate) fn compute_score( 308pub(crate) fn compute_score(
309 ctx: &CompletionContext, 309 ctx: &CompletionContext,
310 // FIXME: this definitely should be a `Type`
310 ty: &str, 311 ty: &str,
311 name: &str, 312 name: &str,
312) -> Option<CompletionScore> { 313) -> Option<CompletionScore> {
313 let (active_name, active_type) = if let Some(record_field) = &ctx.record_field_syntax { 314 let (active_name, active_type) = if let Some(record_field) = &ctx.record_field_syntax {
314 if let Some((struct_field, _)) = ctx.sema.resolve_record_field(record_field) { 315 let (struct_field, _local) = ctx.sema.resolve_record_field(record_field)?;
315 ( 316 (
316 struct_field.name(ctx.db).to_string(), 317 struct_field.name(ctx.db).to_string(),
317 struct_field.signature_ty(ctx.db).display(ctx.db).to_string(), 318 struct_field.signature_ty(ctx.db).display(ctx.db).to_string(),
318 ) 319 )
319 } else {
320 return None;
321 }
322 } else if let Some(call_info) = call_info(ctx.db, ctx.file_position) { 320 } else if let Some(call_info) = call_info(ctx.db, ctx.file_position) {
323 if call_info.active_parameter_type().is_some() 321 (call_info.active_parameter_name()?, call_info.active_parameter_type()?)
324 && call_info.active_parameter_name().is_some()
325 {
326 (call_info.active_parameter_name().unwrap(), call_info.active_parameter_type().unwrap())
327 } else {
328 return None;
329 }
330 } else { 322 } else {
331 return None; 323 return None;
332 }; 324 };
333 325
334 // Compute score 326 // Compute score
335 // For the same type 327 // For the same type
336 if &active_type == ty { 328 if &active_type != ty {
337 // If same type + same name then go top position 329 return None;
338 let res = if active_name == name { 330 }
339 CompletionScore::TypeAndNameMatch 331
340 } else { 332 let mut res = CompletionScore::TypeMatch;
341 CompletionScore::TypeMatch 333
342 }; 334 // If same type + same name then go top position
343 return Some(res); 335 if active_name == name {
336 res = CompletionScore::TypeAndNameMatch
344 } 337 }
345 None 338
339 Some(res)
346} 340}
347 341
348enum Params { 342enum Params {