diff options
Diffstat (limited to 'crates/completion/src/item.rs')
-rw-r--r-- | crates/completion/src/item.rs | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/crates/completion/src/item.rs b/crates/completion/src/item.rs index 0134ff219..4147853e7 100644 --- a/crates/completion/src/item.rs +++ b/crates/completion/src/item.rs | |||
@@ -270,6 +270,7 @@ impl CompletionItem { | |||
270 | pub struct ImportEdit { | 270 | pub struct ImportEdit { |
271 | pub import_path: ModPath, | 271 | pub import_path: ModPath, |
272 | pub import_scope: ImportScope, | 272 | pub import_scope: ImportScope, |
273 | pub import_for_trait_assoc_item: bool, | ||
273 | } | 274 | } |
274 | 275 | ||
275 | impl ImportEdit { | 276 | impl ImportEdit { |
@@ -321,17 +322,19 @@ impl Builder { | |||
321 | let mut insert_text = self.insert_text; | 322 | let mut insert_text = self.insert_text; |
322 | 323 | ||
323 | if let Some(import_to_add) = self.import_to_add.as_ref() { | 324 | if let Some(import_to_add) = self.import_to_add.as_ref() { |
324 | let mut import_path_without_last_segment = import_to_add.import_path.to_owned(); | 325 | if import_to_add.import_for_trait_assoc_item { |
325 | let _ = import_path_without_last_segment.segments.pop(); | 326 | lookup = lookup.or_else(|| Some(label.clone())); |
326 | 327 | insert_text = insert_text.or_else(|| Some(label.clone())); | |
327 | if !import_path_without_last_segment.segments.is_empty() { | 328 | label = format!("{} ({})", label, import_to_add.import_path); |
328 | if lookup.is_none() { | 329 | } else { |
329 | lookup = Some(label.clone()); | 330 | let mut import_path_without_last_segment = import_to_add.import_path.to_owned(); |
330 | } | 331 | let _ = import_path_without_last_segment.segments.pop(); |
331 | if insert_text.is_none() { | 332 | |
332 | insert_text = Some(label.clone()); | 333 | if !import_path_without_last_segment.segments.is_empty() { |
334 | lookup = lookup.or_else(|| Some(label.clone())); | ||
335 | insert_text = insert_text.or_else(|| Some(label.clone())); | ||
336 | label = format!("{}::{}", import_path_without_last_segment, label); | ||
333 | } | 337 | } |
334 | label = format!("{}::{}", import_path_without_last_segment, label); | ||
335 | } | 338 | } |
336 | } | 339 | } |
337 | 340 | ||
@@ -398,7 +401,9 @@ impl Builder { | |||
398 | pub(crate) fn set_detail(mut self, detail: Option<impl Into<String>>) -> Builder { | 401 | pub(crate) fn set_detail(mut self, detail: Option<impl Into<String>>) -> Builder { |
399 | self.detail = detail.map(Into::into); | 402 | self.detail = detail.map(Into::into); |
400 | if let Some(detail) = &self.detail { | 403 | if let Some(detail) = &self.detail { |
401 | assert_never!(detail.contains('\n'), "multiline detail: {}", detail); | 404 | if assert_never!(detail.contains('\n'), "multiline detail: {}", detail) { |
405 | self.detail = Some(detail.splitn(2, '\n').next().unwrap().to_string()); | ||
406 | } | ||
402 | } | 407 | } |
403 | self | 408 | self |
404 | } | 409 | } |