aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_completion/src/render.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide_completion/src/render.rs')
-rw-r--r--crates/ide_completion/src/render.rs62
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> {