diff options
Diffstat (limited to 'crates/ide_completion/src/render.rs')
-rw-r--r-- | crates/ide_completion/src/render.rs | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/crates/ide_completion/src/render.rs b/crates/ide_completion/src/render.rs index 8c8b149a1..c50cba0e0 100644 --- a/crates/ide_completion/src/render.rs +++ b/crates/ide_completion/src/render.rs | |||
@@ -145,28 +145,34 @@ impl<'a> Render<'a> { | |||
145 | fn add_field(&mut self, field: hir::Field, ty: &Type) -> CompletionItem { | 145 | fn add_field(&mut self, field: hir::Field, ty: &Type) -> CompletionItem { |
146 | let is_deprecated = self.ctx.is_deprecated(field); | 146 | let is_deprecated = self.ctx.is_deprecated(field); |
147 | let name = field.name(self.ctx.db()); | 147 | let name = field.name(self.ctx.db()); |
148 | let mut item = CompletionItem::new( | 148 | let mut builder = CompletionItem::new( |
149 | CompletionKind::Reference, | 149 | CompletionKind::Reference, |
150 | self.ctx.source_range(), | 150 | self.ctx.source_range(), |
151 | name.to_string(), | 151 | name.to_string(), |
152 | ) | 152 | ); |
153 | .kind(SymbolKind::Field) | 153 | builder |
154 | .detail(ty.display(self.ctx.db()).to_string()) | 154 | .kind(SymbolKind::Field) |
155 | .set_documentation(field.docs(self.ctx.db())) | 155 | .detail(ty.display(self.ctx.db()).to_string()) |
156 | .set_deprecated(is_deprecated); | 156 | .set_documentation(field.docs(self.ctx.db())) |
157 | .set_deprecated(is_deprecated); | ||
157 | 158 | ||
158 | if let Some(relevance) = compute_relevance(&self.ctx, &ty, &name.to_string()) { | 159 | if let Some(relevance) = compute_relevance(&self.ctx, &ty, &name.to_string()) { |
159 | item = item.set_relevance(relevance); | 160 | builder.set_relevance(relevance); |
160 | } | 161 | } |
161 | 162 | ||
162 | item.build() | 163 | builder.build() |
163 | } | 164 | } |
164 | 165 | ||
165 | fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem { | 166 | fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem { |
166 | CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), field.to_string()) | 167 | let mut builder = CompletionItem::new( |
167 | .kind(SymbolKind::Field) | 168 | CompletionKind::Reference, |
168 | .detail(ty.display(self.ctx.db()).to_string()) | 169 | self.ctx.source_range(), |
169 | .build() | 170 | field.to_string(), |
171 | ); | ||
172 | |||
173 | builder.kind(SymbolKind::Field).detail(ty.display(self.ctx.db()).to_string()); | ||
174 | |||
175 | builder.build() | ||
170 | } | 176 | } |
171 | 177 | ||
172 | fn render_resolution( | 178 | fn render_resolution( |
@@ -225,15 +231,13 @@ impl<'a> Render<'a> { | |||
225 | CompletionItemKind::SymbolKind(SymbolKind::SelfParam) | 231 | CompletionItemKind::SymbolKind(SymbolKind::SelfParam) |
226 | } | 232 | } |
227 | ScopeDef::Unknown => { | 233 | ScopeDef::Unknown => { |
228 | let item = CompletionItem::new( | 234 | let mut item = CompletionItem::new( |
229 | CompletionKind::Reference, | 235 | CompletionKind::Reference, |
230 | self.ctx.source_range(), | 236 | self.ctx.source_range(), |
231 | local_name, | 237 | local_name, |
232 | ) | 238 | ); |
233 | .kind(CompletionItemKind::UnresolvedReference) | 239 | item.kind(CompletionItemKind::UnresolvedReference).add_import(import_to_add); |
234 | .add_import(import_to_add) | 240 | return Some(item.build()); |
235 | .build(); | ||
236 | return Some(item); | ||
237 | } | 241 | } |
238 | }; | 242 | }; |
239 | 243 | ||
@@ -242,14 +246,14 @@ impl<'a> Render<'a> { | |||
242 | if let ScopeDef::Local(local) = resolution { | 246 | if let ScopeDef::Local(local) = resolution { |
243 | let ty = local.ty(self.ctx.db()); | 247 | let ty = local.ty(self.ctx.db()); |
244 | if !ty.is_unknown() { | 248 | if !ty.is_unknown() { |
245 | item = item.detail(ty.display(self.ctx.db()).to_string()); | 249 | item.detail(ty.display(self.ctx.db()).to_string()); |
246 | } | 250 | } |
247 | }; | 251 | }; |
248 | 252 | ||
249 | if let ScopeDef::Local(local) = resolution { | 253 | if let ScopeDef::Local(local) = resolution { |
250 | let ty = local.ty(self.ctx.db()); | 254 | let ty = local.ty(self.ctx.db()); |
251 | if let Some(relevance) = compute_relevance(&self.ctx, &ty, &local_name) { | 255 | if let Some(relevance) = compute_relevance(&self.ctx, &ty, &local_name) { |
252 | item = item.set_relevance(relevance) | 256 | item.set_relevance(relevance); |
253 | } | 257 | } |
254 | if let Some((_expected_name, expected_type)) = self.ctx.expected_name_and_type() { | 258 | if let Some((_expected_name, expected_type)) = self.ctx.expected_name_and_type() { |
255 | if let Some(ty_without_ref) = expected_type.remove_ref() { | 259 | if let Some(ty_without_ref) = expected_type.remove_ref() { |
@@ -260,7 +264,7 @@ impl<'a> Render<'a> { | |||
260 | } else { | 264 | } else { |
261 | Mutability::Shared | 265 | Mutability::Shared |
262 | }; | 266 | }; |
263 | item = item.ref_match(mutability) | 267 | item.ref_match(mutability); |
264 | } | 268 | } |
265 | } | 269 | } |
266 | } | 270 | } |
@@ -281,21 +285,17 @@ impl<'a> Render<'a> { | |||
281 | }; | 285 | }; |
282 | if has_non_default_type_params { | 286 | if has_non_default_type_params { |
283 | cov_mark::hit!(inserts_angle_brackets_for_generics); | 287 | cov_mark::hit!(inserts_angle_brackets_for_generics); |
284 | item = item | 288 | item.lookup_by(local_name.clone()) |
285 | .lookup_by(local_name.clone()) | ||
286 | .label(format!("{}<…>", local_name)) | 289 | .label(format!("{}<…>", local_name)) |
287 | .insert_snippet(cap, format!("{}<$0>", local_name)); | 290 | .insert_snippet(cap, format!("{}<$0>", local_name)); |
288 | } | 291 | } |
289 | } | 292 | } |
290 | } | 293 | } |
291 | 294 | item.kind(kind) | |
292 | Some( | 295 | .add_import(import_to_add) |
293 | item.kind(kind) | 296 | .set_documentation(self.docs(resolution)) |
294 | .add_import(import_to_add) | 297 | .set_deprecated(self.is_deprecated(resolution)); |
295 | .set_documentation(self.docs(resolution)) | 298 | Some(item.build()) |
296 | .set_deprecated(self.is_deprecated(resolution)) | ||
297 | .build(), | ||
298 | ) | ||
299 | } | 299 | } |
300 | 300 | ||
301 | fn docs(&self, resolution: &ScopeDef) -> Option<Documentation> { | 301 | fn docs(&self, resolution: &ScopeDef) -> Option<Documentation> { |