From 576625f0a1c6e54075d173db7e691d75077ca677 Mon Sep 17 00:00:00 2001 From: "Jeremy A. Kolb" Date: Wed, 23 Jan 2019 16:22:10 -0500 Subject: Add way of getting docs from the code model and use for completion --- crates/ra_ide_api/src/completion/complete_path.rs | 5 ++++- crates/ra_ide_api/src/completion/completion_item.rs | 13 +++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'crates/ra_ide_api/src/completion') 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::{ completion::{CompletionItem, CompletionItemKind, Completions, CompletionKind, CompletionContext}, }; +use hir::Docs; + pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { let (path, module) = match (&ctx.path_prefix, &ctx.module) { (Some(path), Some(module)) => (path.clone(), module), @@ -27,13 +29,14 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) { hir::Def::Enum(e) => { e.variants(ctx.db) .into_iter() - .for_each(|(variant_name, _variant)| { + .for_each(|(variant_name, variant)| { CompletionItem::new( CompletionKind::Reference, ctx.source_range(), variant_name.to_string(), ) .kind(CompletionItemKind::EnumVariant) + .set_documentation(variant.docs(ctx.db)) .add_to(acc) }); } 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 @@ -use hir::PerNs; +use hir::{Docs, Documentation, PerNs}; use crate::completion::completion_context::CompletionContext; use ra_syntax::{ @@ -19,7 +19,7 @@ pub struct CompletionItem { label: String, kind: Option, detail: Option, - documentation: Option, + documentation: Option, lookup: Option, insert_text: Option, insert_text_format: InsertTextFormat, @@ -98,7 +98,7 @@ impl CompletionItem { } /// A doc-comment pub fn documentation(&self) -> Option<&str> { - self.documentation.as_ref().map(|it| it.as_str()) + self.documentation.as_ref().map(|it| it.contents()) } /// What string is used for filtering. pub fn lookup(&self) -> &str { @@ -137,7 +137,7 @@ pub(crate) struct Builder { insert_text: Option, insert_text_format: InsertTextFormat, detail: Option, - documentation: Option, + documentation: Option, lookup: Option, kind: Option, text_edit: Option, @@ -197,10 +197,10 @@ impl Builder { self } #[allow(unused)] - pub(crate) fn documentation(self, docs: impl Into) -> Builder { + pub(crate) fn documentation(self, docs: Documentation) -> Builder { self.set_documentation(Some(docs)) } - pub(crate) fn set_documentation(mut self, docs: Option>) -> Builder { + pub(crate) fn set_documentation(mut self, docs: Option) -> Builder { self.documentation = docs.map(Into::into); self } @@ -265,6 +265,7 @@ impl Builder { } self.insert_text_format = InsertTextFormat::Snippet; } + if let Some(docs) = function.docs(ctx.db) { self.documentation = Some(docs); } -- cgit v1.2.3