diff options
Diffstat (limited to 'crates/ra_ide_api/src/completion')
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_dot.rs | 14 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/completion_item.rs | 11 |
2 files changed, 16 insertions, 9 deletions
diff --git a/crates/ra_ide_api/src/completion/complete_dot.rs b/crates/ra_ide_api/src/completion/complete_dot.rs index 5d4e60dc5..65bba6dc7 100644 --- a/crates/ra_ide_api/src/completion/complete_dot.rs +++ b/crates/ra_ide_api/src/completion/complete_dot.rs | |||
@@ -28,13 +28,13 @@ fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty) | |||
28 | Ty::Adt { def_id, .. } => { | 28 | Ty::Adt { def_id, .. } => { |
29 | match def_id.resolve(ctx.db)? { | 29 | match def_id.resolve(ctx.db)? { |
30 | Def::Struct(s) => { | 30 | Def::Struct(s) => { |
31 | let variant_data = s.variant_data(ctx.db)?; | 31 | for field in s.fields(ctx.db)? { |
32 | for field in variant_data.fields() { | ||
33 | CompletionItem::new( | 32 | CompletionItem::new( |
34 | CompletionKind::Reference, | 33 | CompletionKind::Reference, |
35 | field.name().to_string(), | 34 | field.name().to_string(), |
36 | ) | 35 | ) |
37 | .kind(CompletionItemKind::Field) | 36 | .kind(CompletionItemKind::Field) |
37 | .set_detail(field.ty(ctx.db)?.map(|ty| ty.to_string())) | ||
38 | .add_to(acc); | 38 | .add_to(acc); |
39 | } | 39 | } |
40 | } | 40 | } |
@@ -72,7 +72,7 @@ mod tests { | |||
72 | a.<|> | 72 | a.<|> |
73 | } | 73 | } |
74 | ", | 74 | ", |
75 | r#"the_field"#, | 75 | r#"the_field "u32""#, |
76 | ); | 76 | ); |
77 | } | 77 | } |
78 | 78 | ||
@@ -80,14 +80,14 @@ mod tests { | |||
80 | fn test_struct_field_completion_self() { | 80 | fn test_struct_field_completion_self() { |
81 | check_ref_completion( | 81 | check_ref_completion( |
82 | r" | 82 | r" |
83 | struct A { the_field: u32 } | 83 | struct A { the_field: (u32,) } |
84 | impl A { | 84 | impl A { |
85 | fn foo(self) { | 85 | fn foo(self) { |
86 | self.<|> | 86 | self.<|> |
87 | } | 87 | } |
88 | } | 88 | } |
89 | ", | 89 | ", |
90 | r#"the_field"#, | 90 | r#"the_field "(u32,)""#, |
91 | ); | 91 | ); |
92 | } | 92 | } |
93 | 93 | ||
@@ -95,14 +95,14 @@ mod tests { | |||
95 | fn test_struct_field_completion_autoderef() { | 95 | fn test_struct_field_completion_autoderef() { |
96 | check_ref_completion( | 96 | check_ref_completion( |
97 | r" | 97 | r" |
98 | struct A { the_field: u32 } | 98 | struct A { the_field: (u32, i32) } |
99 | impl A { | 99 | impl A { |
100 | fn foo(&self) { | 100 | fn foo(&self) { |
101 | self.<|> | 101 | self.<|> |
102 | } | 102 | } |
103 | } | 103 | } |
104 | ", | 104 | ", |
105 | r#"the_field"#, | 105 | r#"the_field "(u32, i32)""#, |
106 | ); | 106 | ); |
107 | } | 107 | } |
108 | 108 | ||
diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index d707a84ef..334449fae 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs | |||
@@ -126,8 +126,12 @@ impl Builder { | |||
126 | self.kind = Some(kind); | 126 | self.kind = Some(kind); |
127 | self | 127 | self |
128 | } | 128 | } |
129 | pub(crate) fn detail(mut self, detail: impl Into<String>) -> Builder { | 129 | #[allow(unused)] |
130 | self.detail = Some(detail.into()); | 130 | pub(crate) fn detail(self, detail: impl Into<String>) -> Builder { |
131 | self.set_detail(Some(detail)) | ||
132 | } | ||
133 | pub(crate) fn set_detail(mut self, detail: Option<impl Into<String>>) -> Builder { | ||
134 | self.detail = detail.map(Into::into); | ||
131 | self | 135 | self |
132 | } | 136 | } |
133 | pub(super) fn from_resolution( | 137 | pub(super) fn from_resolution( |
@@ -239,6 +243,9 @@ impl Completions { | |||
239 | } else { | 243 | } else { |
240 | res.push_str(&c.label); | 244 | res.push_str(&c.label); |
241 | } | 245 | } |
246 | if let Some(detail) = &c.detail { | ||
247 | res.push_str(&format!(" {:?}", detail)); | ||
248 | } | ||
242 | if let Some(snippet) = &c.snippet { | 249 | if let Some(snippet) = &c.snippet { |
243 | res.push_str(&format!(" {:?}", snippet)); | 250 | res.push_str(&format!(" {:?}", snippet)); |
244 | } | 251 | } |