aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src
diff options
context:
space:
mode:
authorJeremy A. Kolb <[email protected]>2019-01-23 21:22:10 +0000
committerJeremy A. Kolb <[email protected]>2019-01-23 21:32:04 +0000
commit576625f0a1c6e54075d173db7e691d75077ca677 (patch)
tree72c1fadf48265e7f5355eb72586de4bcdab43cec /crates/ra_ide_api/src
parent6a6ce2bc959c346aed7a98c8509d1aa3d19ec8a9 (diff)
Add way of getting docs from the code model and use for completion
Diffstat (limited to 'crates/ra_ide_api/src')
-rw-r--r--crates/ra_ide_api/src/completion/complete_path.rs5
-rw-r--r--crates/ra_ide_api/src/completion/completion_item.rs13
2 files changed, 11 insertions, 7 deletions
diff --git a/crates/ra_ide_api/src/completion/complete_path.rs b/crates/ra_ide_api/src/completion/complete_path.rs
index 6bed299d2..aeb226847 100644
--- a/crates/ra_ide_api/src/completion/complete_path.rs
+++ b/crates/ra_ide_api/src/completion/complete_path.rs
@@ -2,6 +2,8 @@ use crate::{
2 completion::{CompletionItem, CompletionItemKind, Completions, CompletionKind, CompletionContext}, 2 completion::{CompletionItem, CompletionItemKind, Completions, CompletionKind, CompletionContext},
3}; 3};
4 4
5use hir::Docs;
6
5pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { 7pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
6 let (path, module) = match (&ctx.path_prefix, &ctx.module) { 8 let (path, module) = match (&ctx.path_prefix, &ctx.module) {
7 (Some(path), Some(module)) => (path.clone(), module), 9 (Some(path), Some(module)) => (path.clone(), module),
@@ -27,13 +29,14 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) {
27 hir::Def::Enum(e) => { 29 hir::Def::Enum(e) => {
28 e.variants(ctx.db) 30 e.variants(ctx.db)
29 .into_iter() 31 .into_iter()
30 .for_each(|(variant_name, _variant)| { 32 .for_each(|(variant_name, variant)| {
31 CompletionItem::new( 33 CompletionItem::new(
32 CompletionKind::Reference, 34 CompletionKind::Reference,
33 ctx.source_range(), 35 ctx.source_range(),
34 variant_name.to_string(), 36 variant_name.to_string(),
35 ) 37 )
36 .kind(CompletionItemKind::EnumVariant) 38 .kind(CompletionItemKind::EnumVariant)
39 .set_documentation(variant.docs(ctx.db))
37 .add_to(acc) 40 .add_to(acc)
38 }); 41 });
39 } 42 }
diff --git a/crates/ra_ide_api/src/completion/completion_item.rs b/crates/ra_ide_api/src/completion/completion_item.rs
index e3bf82304..8e0be4c4b 100644
--- a/crates/ra_ide_api/src/completion/completion_item.rs
+++ b/crates/ra_ide_api/src/completion/completion_item.rs
@@ -1,4 +1,4 @@
1use hir::PerNs; 1use hir::{Docs, Documentation, PerNs};
2 2
3use crate::completion::completion_context::CompletionContext; 3use crate::completion::completion_context::CompletionContext;
4use ra_syntax::{ 4use ra_syntax::{
@@ -19,7 +19,7 @@ pub struct CompletionItem {
19 label: String, 19 label: String,
20 kind: Option<CompletionItemKind>, 20 kind: Option<CompletionItemKind>,
21 detail: Option<String>, 21 detail: Option<String>,
22 documentation: Option<String>, 22 documentation: Option<Documentation>,
23 lookup: Option<String>, 23 lookup: Option<String>,
24 insert_text: Option<String>, 24 insert_text: Option<String>,
25 insert_text_format: InsertTextFormat, 25 insert_text_format: InsertTextFormat,
@@ -98,7 +98,7 @@ impl CompletionItem {
98 } 98 }
99 /// A doc-comment 99 /// A doc-comment
100 pub fn documentation(&self) -> Option<&str> { 100 pub fn documentation(&self) -> Option<&str> {
101 self.documentation.as_ref().map(|it| it.as_str()) 101 self.documentation.as_ref().map(|it| it.contents())
102 } 102 }
103 /// What string is used for filtering. 103 /// What string is used for filtering.
104 pub fn lookup(&self) -> &str { 104 pub fn lookup(&self) -> &str {
@@ -137,7 +137,7 @@ pub(crate) struct Builder {
137 insert_text: Option<String>, 137 insert_text: Option<String>,
138 insert_text_format: InsertTextFormat, 138 insert_text_format: InsertTextFormat,
139 detail: Option<String>, 139 detail: Option<String>,
140 documentation: Option<String>, 140 documentation: Option<Documentation>,
141 lookup: Option<String>, 141 lookup: Option<String>,
142 kind: Option<CompletionItemKind>, 142 kind: Option<CompletionItemKind>,
143 text_edit: Option<TextEdit>, 143 text_edit: Option<TextEdit>,
@@ -197,10 +197,10 @@ impl Builder {
197 self 197 self
198 } 198 }
199 #[allow(unused)] 199 #[allow(unused)]
200 pub(crate) fn documentation(self, docs: impl Into<String>) -> Builder { 200 pub(crate) fn documentation(self, docs: Documentation) -> Builder {
201 self.set_documentation(Some(docs)) 201 self.set_documentation(Some(docs))
202 } 202 }
203 pub(crate) fn set_documentation(mut self, docs: Option<impl Into<String>>) -> Builder { 203 pub(crate) fn set_documentation(mut self, docs: Option<Documentation>) -> Builder {
204 self.documentation = docs.map(Into::into); 204 self.documentation = docs.map(Into::into);
205 self 205 self
206 } 206 }
@@ -265,6 +265,7 @@ impl Builder {
265 } 265 }
266 self.insert_text_format = InsertTextFormat::Snippet; 266 self.insert_text_format = InsertTextFormat::Snippet;
267 } 267 }
268
268 if let Some(docs) = function.docs(ctx.db) { 269 if let Some(docs) = function.docs(ctx.db) {
269 self.documentation = Some(docs); 270 self.documentation = Some(docs);
270 } 271 }