diff options
Diffstat (limited to 'crates/ide_completion/src/render.rs')
-rw-r--r-- | crates/ide_completion/src/render.rs | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/crates/ide_completion/src/render.rs b/crates/ide_completion/src/render.rs index 905f0b197..670563e50 100644 --- a/crates/ide_completion/src/render.rs +++ b/crates/ide_completion/src/render.rs | |||
@@ -118,19 +118,6 @@ impl<'a> RenderContext<'a> { | |||
118 | fn docs(&self, node: impl HasAttrs) -> Option<Documentation> { | 118 | fn docs(&self, node: impl HasAttrs) -> Option<Documentation> { |
119 | node.docs(self.db()) | 119 | node.docs(self.db()) |
120 | } | 120 | } |
121 | |||
122 | fn expected_name_and_type(&self) -> Option<(String, Type)> { | ||
123 | if let Some(record_field) = &self.completion.record_field_syntax { | ||
124 | cov_mark::hit!(record_field_type_match); | ||
125 | let (struct_field, _local) = self.completion.sema.resolve_record_field(record_field)?; | ||
126 | Some((struct_field.name(self.db()).to_string(), struct_field.signature_ty(self.db()))) | ||
127 | } else if let Some(active_parameter) = &self.completion.active_parameter { | ||
128 | cov_mark::hit!(active_param_type_match); | ||
129 | Some((active_parameter.name.clone(), active_parameter.ty.clone())) | ||
130 | } else { | ||
131 | None | ||
132 | } | ||
133 | } | ||
134 | } | 121 | } |
135 | 122 | ||
136 | /// Generic renderer for completion items. | 123 | /// Generic renderer for completion items. |
@@ -256,8 +243,8 @@ impl<'a> Render<'a> { | |||
256 | relevance.is_local = true; | 243 | relevance.is_local = true; |
257 | item.set_relevance(relevance); | 244 | item.set_relevance(relevance); |
258 | 245 | ||
259 | if let Some((_expected_name, expected_type)) = self.ctx.expected_name_and_type() { | 246 | if let Some(expected_type) = self.ctx.completion.expected_type.as_ref() { |
260 | if ty != expected_type { | 247 | if &ty != expected_type { |
261 | if let Some(ty_without_ref) = expected_type.remove_ref() { | 248 | if let Some(ty_without_ref) = expected_type.remove_ref() { |
262 | if relevance_type_match(self.ctx.db().upcast(), &ty, &ty_without_ref) { | 249 | if relevance_type_match(self.ctx.db().upcast(), &ty, &ty_without_ref) { |
263 | cov_mark::hit!(suggest_ref); | 250 | cov_mark::hit!(suggest_ref); |
@@ -329,10 +316,8 @@ impl<'a> Render<'a> { | |||
329 | fn compute_relevance(ctx: &RenderContext, ty: &Type, name: &str) -> CompletionRelevance { | 316 | fn compute_relevance(ctx: &RenderContext, ty: &Type, name: &str) -> CompletionRelevance { |
330 | let mut res = CompletionRelevance::default(); | 317 | let mut res = CompletionRelevance::default(); |
331 | 318 | ||
332 | if let Some((expected_name, expected_type)) = ctx.expected_name_and_type() { | 319 | res.exact_type_match = Some(ty) == ctx.completion.expected_type.as_ref(); |
333 | res.exact_type_match = ty == &expected_type; | 320 | res.exact_name_match = Some(name) == ctx.completion.expected_name.as_deref(); |
334 | res.exact_name_match = name == &expected_name; | ||
335 | } | ||
336 | 321 | ||
337 | res | 322 | res |
338 | } | 323 | } |
@@ -852,7 +837,6 @@ fn foo(xs: Vec<i128>) | |||
852 | 837 | ||
853 | #[test] | 838 | #[test] |
854 | fn active_param_relevance() { | 839 | fn active_param_relevance() { |
855 | cov_mark::check!(active_param_type_match); | ||
856 | check_relevance( | 840 | check_relevance( |
857 | r#" | 841 | r#" |
858 | struct S { foo: i64, bar: u32, baz: u32 } | 842 | struct S { foo: i64, bar: u32, baz: u32 } |
@@ -869,7 +853,6 @@ fn foo(s: S) { test(s.$0) } | |||
869 | 853 | ||
870 | #[test] | 854 | #[test] |
871 | fn record_field_relevances() { | 855 | fn record_field_relevances() { |
872 | cov_mark::check!(record_field_type_match); | ||
873 | check_relevance( | 856 | check_relevance( |
874 | r#" | 857 | r#" |
875 | struct A { foo: i64, bar: u32, baz: u32 } | 858 | struct A { foo: i64, bar: u32, baz: u32 } |