aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/completion
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/completion')
-rw-r--r--crates/ra_ide_api/src/completion/complete_dot.rs8
-rw-r--r--crates/ra_ide_api/src/completion/complete_path.rs51
-rw-r--r--crates/ra_ide_api/src/completion/completion_item.rs2
-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.snap64
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__mod_with_docs.snap26
-rw-r--r--crates/ra_ide_api/src/completion/snapshots/completion_item__struct_field_completion_self.snap12
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 @@
1use hir::{Ty, AdtDef}; 1use hir::{Ty, AdtDef, Docs};
2 2
3use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind}; 3use crate::completion::{CompletionContext, Completions, CompletionItem, CompletionItemKind};
4use crate::completion::completion_item::CompletionKind; 4use 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 @@
1use join_to_string::join;
2
1use crate::{ 3use 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---
2created: "2019-01-23T23:49:43.278245900+00:00" 2created: "2019-01-25T16:44:04.640545300+00:00"
3creator: [email protected].1 3creator: [email protected].2
4expression: kind_completions 4expression: kind_completions
5source: "crates\\ra_ide_api\\src\\completion\\completion_item.rs" 5source: 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---
2created: "2019-01-25T16:44:04.641542400+00:00"
3creator: [email protected]
4expression: kind_completions
5source: 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---
2created: "2019-01-25T17:49:28.949186500+00:00"
3creator: [email protected]
4expression: kind_completions
5source: 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---
2created: "2019-01-23T13:19:23.501297515+00:00" 2created: "2019-01-25T19:27:09.519688600+00:00"
3creator: [email protected] 3creator: [email protected]
4expression: kind_completions 4expression: kind_completions
5source: crates/ra_ide_api/src/completion/completion_item.rs 5source: 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]