]> git.lizzy.rs Git - rust.git/commitdiff
add completion detail
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 9 Jan 2019 15:09:49 +0000 (18:09 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 9 Jan 2019 16:40:11 +0000 (19:40 +0300)
crates/ra_ide_api/src/completion/completion_item.rs
crates/ra_lsp_server/src/conv.rs

index a25b87beefee403b6f985c0f0114ee2d4e30af9a..d707a84ef3d919e0e55ad720e780b48c8de62c1b 100644 (file)
@@ -11,6 +11,7 @@ pub struct CompletionItem {
     /// completion.
     completion_kind: CompletionKind,
     label: String,
+    detail: Option<String>,
     lookup: Option<String>,
     snippet: Option<String>,
     kind: Option<CompletionItemKind>,
@@ -51,6 +52,7 @@ pub(crate) fn new(completion_kind: CompletionKind, label: impl Into<String>) ->
         Builder {
             completion_kind,
             label,
+            detail: None,
             lookup: None,
             snippet: None,
             kind: None,
@@ -60,6 +62,10 @@ pub(crate) fn new(completion_kind: CompletionKind, label: impl Into<String>) ->
     pub fn label(&self) -> &str {
         &self.label
     }
+    /// Short one-line additional information, like a type
+    pub fn detail(&self) -> Option<&str> {
+        self.detail.as_ref().map(|it| it.as_str())
+    }
     /// What string is used for filtering.
     pub fn lookup(&self) -> &str {
         self.lookup
@@ -87,6 +93,7 @@ pub fn kind(&self) -> Option<CompletionItemKind> {
 pub(crate) struct Builder {
     completion_kind: CompletionKind,
     label: String,
+    detail: Option<String>,
     lookup: Option<String>,
     snippet: Option<String>,
     kind: Option<CompletionItemKind>,
@@ -100,6 +107,7 @@ pub(crate) fn add_to(self, acc: &mut Completions) {
     pub(crate) fn build(self) -> CompletionItem {
         CompletionItem {
             label: self.label,
+            detail: self.detail,
             lookup: self.lookup,
             snippet: self.snippet,
             kind: self.kind,
@@ -118,6 +126,10 @@ pub(crate) fn kind(mut self, kind: CompletionItemKind) -> Builder {
         self.kind = Some(kind);
         self
     }
+    pub(crate) fn detail(mut self, detail: impl Into<String>) -> Builder {
+        self.detail = Some(detail.into());
+        self
+    }
     pub(super) fn from_resolution(
         mut self,
         ctx: &CompletionContext,
index 5c8b3c194bd3c9afb5395391ccf8cd5a65d0b241..35c679a4af4ad17ce45af1761f2b32aa17ff233b 100644 (file)
@@ -75,6 +75,7 @@ impl Conv for CompletionItem {
     fn conv(self) -> <Self as Conv>::Output {
         let mut res = ::languageserver_types::CompletionItem {
             label: self.label().to_string(),
+            detail: self.detail().map(|it| it.to_string()),
             filter_text: Some(self.lookup().to_string()),
             kind: self.kind().map(|it| it.conv()),
             ..Default::default()