diff options
Diffstat (limited to 'crates/ra_ide_api/src/completion')
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_dot.rs | 8 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_path.rs | 51 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/completion_item.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap (renamed from crates/ra_ide_api/src/completion/snapshots/completion_item__reference_completion.snap) | 14 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap | 64 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap | 26 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap | 12 |
7 files changed, 164 insertions, 13 deletions
diff --git a/crates/ra_ide_api/src/completion/complete_dot.rs b/crates/ra_ide_api/src/completion/complete_dot.rs index 060a46c5e..bad51cc51 100644 --- a/crates/ra_ide_api/src/completion/complete_dot.rs +++ b/crates/ra_ide_api/src/completion/complete_dot.rs | |||
@@ -1,4 +1,4 @@ | |||
1 | use hir::{Ty, AdtDef}; | 1 | use hir::{Ty, AdtDef, Docs}; |
2 | 2 | ||
3 | use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind}; | 3 | use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind}; |
4 | use crate::completion::completion_item::CompletionKind; | 4 | use crate::completion::completion_item::CompletionKind; |
@@ -38,6 +38,7 @@ fn complete_fields(acc: &mut Completions, ctx: &CompletionContext, receiver: Ty) | |||
38 | ) | 38 | ) |
39 | .kind(CompletionItemKind::Field) | 39 | .kind(CompletionItemKind::Field) |
40 | .detail(field.ty(ctx.db).subst(substs).to_string()) | 40 | .detail(field.ty(ctx.db).subst(substs).to_string()) |
41 | .set_documentation(field.docs(ctx.db)) | ||
41 | .add_to(acc); | 42 | .add_to(acc); |
42 | } | 43 | } |
43 | } | 44 | } |
@@ -107,7 +108,10 @@ mod tests { | |||
107 | check_ref_completion( | 108 | check_ref_completion( |
108 | "struct_field_completion_self", | 109 | "struct_field_completion_self", |
109 | r" | 110 | r" |
110 | struct A { the_field: (u32,) } | 111 | struct A { |
112 | /// This is the_field | ||
113 | the_field: (u32,) | ||
114 | } | ||
111 | impl A { | 115 | impl A { |
112 | fn foo(self) { | 116 | fn foo(self) { |
113 | self.<|> | 117 | self.<|> |
diff --git a/crates/ra_ide_api/src/completion/complete_path.rs b/crates/ra_ide_api/src/completion/complete_path.rs index e3f1d42f8..b33ddcde5 100644 --- a/crates/ra_ide_api/src/completion/complete_path.rs +++ b/crates/ra_ide_api/src/completion/complete_path.rs | |||
@@ -1,3 +1,5 @@ | |||
1 | use join_to_string::join; | ||
2 | |||
1 | use crate::{ | 3 | use crate::{ |
2 | completion::{CompletionItem, CompletionItemKind, Completions, CompletionKind, CompletionContext}, | 4 | completion::{CompletionItem, CompletionItemKind, Completions, CompletionKind, CompletionContext}, |
3 | }; | 5 | }; |
@@ -29,6 +31,15 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { | |||
29 | hir::ModuleDef::Enum(e) => { | 31 | hir::ModuleDef::Enum(e) => { |
30 | e.variants(ctx.db).into_iter().for_each(|variant| { | 32 | e.variants(ctx.db).into_iter().for_each(|variant| { |
31 | if let Some(name) = variant.name(ctx.db) { | 33 | if let Some(name) = variant.name(ctx.db) { |
34 | let detail_types = variant | ||
35 | .fields(ctx.db) | ||
36 | .into_iter() | ||
37 | .map(|field| field.ty(ctx.db)); | ||
38 | let detail = join(detail_types) | ||
39 | .separator(", ") | ||
40 | .surround_with("(", ")") | ||
41 | .to_string(); | ||
42 | |||
32 | CompletionItem::new( | 43 | CompletionItem::new( |
33 | CompletionKind::Reference, | 44 | CompletionKind::Reference, |
34 | ctx.source_range(), | 45 | ctx.source_range(), |
@@ -36,6 +47,7 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { | |||
36 | ) | 47 | ) |
37 | .kind(CompletionItemKind::EnumVariant) | 48 | .kind(CompletionItemKind::EnumVariant) |
38 | .set_documentation(variant.docs(ctx.db)) | 49 | .set_documentation(variant.docs(ctx.db)) |
50 | .set_detail(Some(detail)) | ||
39 | .add_to(acc) | 51 | .add_to(acc) |
40 | } | 52 | } |
41 | }); | 53 | }); |
@@ -54,6 +66,22 @@ mod tests { | |||
54 | } | 66 | } |
55 | 67 | ||
56 | #[test] | 68 | #[test] |
69 | fn completes_mod_with_docs() { | ||
70 | check_reference_completion( | ||
71 | "mod_with_docs", | ||
72 | r" | ||
73 | use self::my<|>; | ||
74 | |||
75 | /// Some simple | ||
76 | /// docs describing `mod my`. | ||
77 | mod my { | ||
78 | struct Bar; | ||
79 | } | ||
80 | ", | ||
81 | ); | ||
82 | } | ||
83 | |||
84 | #[test] | ||
57 | fn completes_use_item_starting_with_self() { | 85 | fn completes_use_item_starting_with_self() { |
58 | check_reference_completion( | 86 | check_reference_completion( |
59 | "use_item_starting_with_self", | 87 | "use_item_starting_with_self", |
@@ -116,7 +144,7 @@ mod tests { | |||
116 | #[test] | 144 | #[test] |
117 | fn completes_enum_variant() { | 145 | fn completes_enum_variant() { |
118 | check_reference_completion( | 146 | check_reference_completion( |
119 | "reference_completion", | 147 | "enum_variant", |
120 | " | 148 | " |
121 | //- /lib.rs | 149 | //- /lib.rs |
122 | /// An enum | 150 | /// An enum |
@@ -130,4 +158,25 @@ mod tests { | |||
130 | ", | 158 | ", |
131 | ); | 159 | ); |
132 | } | 160 | } |
161 | |||
162 | #[test] | ||
163 | fn completes_enum_variant_with_details() { | ||
164 | check_reference_completion( | ||
165 | "enum_variant_with_details", | ||
166 | " | ||
167 | //- /lib.rs | ||
168 | struct S { field: u32 } | ||
169 | /// An enum | ||
170 | enum E { | ||
171 | /// Foo Variant (empty) | ||
172 | Foo, | ||
173 | /// Bar Variant with i32 and u32 | ||
174 | Bar(i32, u32), | ||
175 | /// | ||
176 | S(S), | ||
177 | } | ||
178 | fn foo() { let _ = E::<|> } | ||
179 | ", | ||
180 | ); | ||
181 | } | ||
133 | } | 182 | } |
diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs index b2b047766..b16ac2b28 100644 --- a/crates/ra_ide_api/src/completion/completion_item.rs +++ b/crates/ra_ide_api/src/completion/completion_item.rs | |||
@@ -215,7 +215,7 @@ impl Builder { | |||
215 | Some(it) => it, | 215 | Some(it) => it, |
216 | }; | 216 | }; |
217 | let (kind, docs) = match def { | 217 | let (kind, docs) = match def { |
218 | hir::ModuleDef::Module(_) => (CompletionItemKind::Module, None), | 218 | hir::ModuleDef::Module(it) => (CompletionItemKind::Module, it.docs(ctx.db)), |
219 | hir::ModuleDef::Function(func) => return self.from_function(ctx, func), | 219 | hir::ModuleDef::Function(func) => return self.from_function(ctx, func), |
220 | hir::ModuleDef::Struct(it) => (CompletionItemKind::Struct, it.docs(ctx.db)), | 220 | hir::ModuleDef::Struct(it) => (CompletionItemKind::Struct, it.docs(ctx.db)), |
221 | hir::ModuleDef::Enum(it) => (CompletionItemKind::Enum, it.docs(ctx.db)), | 221 | hir::ModuleDef::Enum(it) => (CompletionItemKind::Enum, it.docs(ctx.db)), |
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__reference_completion.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap index e46f7807b..8c84439b2 100644 --- a/crates/ra_ide_api/src/completion/snapshots/completion_item__reference_completion.snap +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant.snap | |||
@@ -1,8 +1,8 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-23T23:49:43.278245900+00:00" | 2 | created: "2019-01-25T16:44:04.640545300+00:00" |
3 | creator: [email protected].1 | 3 | creator: [email protected].2 |
4 | expression: kind_completions | 4 | expression: kind_completions |
5 | source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" | 5 | source: crates/ra_ide_api/src/completion/completion_item.rs |
6 | --- | 6 | --- |
7 | [ | 7 | [ |
8 | CompletionItem { | 8 | CompletionItem { |
@@ -11,7 +11,9 @@ source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" | |||
11 | kind: Some( | 11 | kind: Some( |
12 | EnumVariant | 12 | EnumVariant |
13 | ), | 13 | ), |
14 | detail: None, | 14 | detail: Some( |
15 | "()" | ||
16 | ), | ||
15 | documentation: Some( | 17 | documentation: Some( |
16 | Documentation( | 18 | Documentation( |
17 | "Foo Variant" | 19 | "Foo Variant" |
@@ -29,7 +31,9 @@ source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" | |||
29 | kind: Some( | 31 | kind: Some( |
30 | EnumVariant | 32 | EnumVariant |
31 | ), | 33 | ), |
32 | detail: None, | 34 | detail: Some( |
35 | "(i32)" | ||
36 | ), | ||
33 | documentation: Some( | 37 | documentation: Some( |
34 | Documentation( | 38 | Documentation( |
35 | "Bar Variant with i32" | 39 | "Bar Variant with i32" |
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap new file mode 100644 index 000000000..384634517 --- /dev/null +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__enum_variant_with_details.snap | |||
@@ -0,0 +1,64 @@ | |||
1 | --- | ||
2 | created: "2019-01-25T16:44:04.641542400+00:00" | ||
3 | creator: [email protected] | ||
4 | expression: kind_completions | ||
5 | source: crates/ra_ide_api/src/completion/completion_item.rs | ||
6 | --- | ||
7 | [ | ||
8 | CompletionItem { | ||
9 | completion_kind: Reference, | ||
10 | label: "Foo", | ||
11 | kind: Some( | ||
12 | EnumVariant | ||
13 | ), | ||
14 | detail: Some( | ||
15 | "()" | ||
16 | ), | ||
17 | documentation: Some( | ||
18 | Documentation( | ||
19 | "Foo Variant (empty)" | ||
20 | ) | ||
21 | ), | ||
22 | lookup: None, | ||
23 | insert_text: None, | ||
24 | insert_text_format: PlainText, | ||
25 | source_range: [180; 180), | ||
26 | text_edit: None | ||
27 | }, | ||
28 | CompletionItem { | ||
29 | completion_kind: Reference, | ||
30 | label: "Bar", | ||
31 | kind: Some( | ||
32 | EnumVariant | ||
33 | ), | ||
34 | detail: Some( | ||
35 | "(i32, u32)" | ||
36 | ), | ||
37 | documentation: Some( | ||
38 | Documentation( | ||
39 | "Bar Variant with i32 and u32" | ||
40 | ) | ||
41 | ), | ||
42 | lookup: None, | ||
43 | insert_text: None, | ||
44 | insert_text_format: PlainText, | ||
45 | source_range: [180; 180), | ||
46 | text_edit: None | ||
47 | }, | ||
48 | CompletionItem { | ||
49 | completion_kind: Reference, | ||
50 | label: "S", | ||
51 | kind: Some( | ||
52 | EnumVariant | ||
53 | ), | ||
54 | detail: Some( | ||
55 | "(S)" | ||
56 | ), | ||
57 | documentation: None, | ||
58 | lookup: None, | ||
59 | insert_text: None, | ||
60 | insert_text_format: PlainText, | ||
61 | source_range: [180; 180), | ||
62 | text_edit: None | ||
63 | } | ||
64 | ] | ||
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap new file mode 100644 index 000000000..3db7119a7 --- /dev/null +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap | |||
@@ -0,0 +1,26 @@ | |||
1 | --- | ||
2 | created: "2019-01-25T17:49:28.949186500+00:00" | ||
3 | creator: [email protected] | ||
4 | expression: kind_completions | ||
5 | source: crates/ra_ide_api/src/completion/completion_item.rs | ||
6 | --- | ||
7 | [ | ||
8 | CompletionItem { | ||
9 | completion_kind: Reference, | ||
10 | label: "my", | ||
11 | kind: Some( | ||
12 | Module | ||
13 | ), | ||
14 | detail: None, | ||
15 | documentation: Some( | ||
16 | Documentation( | ||
17 | "Some simple\ndocs describing `mod my`." | ||
18 | ) | ||
19 | ), | ||
20 | lookup: None, | ||
21 | insert_text: None, | ||
22 | insert_text_format: PlainText, | ||
23 | source_range: [23; 25), | ||
24 | text_edit: None | ||
25 | } | ||
26 | ] | ||
diff --git a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap index 80e8f3df5..580e92a90 100644 --- a/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap +++ b/crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap | |||
@@ -1,5 +1,5 @@ | |||
1 | --- | 1 | --- |
2 | created: "2019-01-23T13:19:23.501297515+00:00" | 2 | created: "2019-01-25T19:27:09.519688600+00:00" |
3 | creator: [email protected] | 3 | creator: [email protected] |
4 | expression: kind_completions | 4 | expression: kind_completions |
5 | source: crates/ra_ide_api/src/completion/completion_item.rs | 5 | source: crates/ra_ide_api/src/completion/completion_item.rs |
@@ -14,11 +14,15 @@ source: crates/ra_ide_api/src/completion/completion_item.rs | |||
14 | detail: Some( | 14 | detail: Some( |
15 | "(u32,)" | 15 | "(u32,)" |
16 | ), | 16 | ), |
17 | documentation: None, | 17 | documentation: Some( |
18 | Documentation( | ||
19 | "This is the_field" | ||
20 | ) | ||
21 | ), | ||
18 | lookup: None, | 22 | lookup: None, |
19 | insert_text: None, | 23 | insert_text: None, |
20 | insert_text_format: PlainText, | 24 | insert_text_format: PlainText, |
21 | source_range: [121; 121), | 25 | source_range: [187; 187), |
22 | text_edit: None | 26 | text_edit: None |
23 | }, | 27 | }, |
24 | CompletionItem { | 28 | CompletionItem { |
@@ -36,7 +40,7 @@ source: crates/ra_ide_api/src/completion/completion_item.rs | |||
36 | "foo()$0" | 40 | "foo()$0" |
37 | ), | 41 | ), |
38 | insert_text_format: Snippet, | 42 | insert_text_format: Snippet, |
39 | source_range: [121; 121), | 43 | source_range: [187; 187), |
40 | text_edit: None | 44 | text_edit: None |
41 | } | 45 | } |
42 | ] | 46 | ] |