mirror of https://github.com/rust-lang/rust.git
Teach CompletionItem about documentation
This commit is contained in:
parent
b59334e67a
commit
5d110c0ee2
|
@ -15,6 +15,7 @@ pub struct CompletionItem {
|
||||||
label: String,
|
label: String,
|
||||||
kind: Option<CompletionItemKind>,
|
kind: Option<CompletionItemKind>,
|
||||||
detail: Option<String>,
|
detail: Option<String>,
|
||||||
|
documentation: Option<String>,
|
||||||
lookup: Option<String>,
|
lookup: Option<String>,
|
||||||
insert_text: Option<String>,
|
insert_text: Option<String>,
|
||||||
insert_text_format: InsertTextFormat,
|
insert_text_format: InsertTextFormat,
|
||||||
|
@ -77,6 +78,7 @@ impl CompletionItem {
|
||||||
insert_text: None,
|
insert_text: None,
|
||||||
insert_text_format: InsertTextFormat::PlainText,
|
insert_text_format: InsertTextFormat::PlainText,
|
||||||
detail: None,
|
detail: None,
|
||||||
|
documentation: None,
|
||||||
lookup: None,
|
lookup: None,
|
||||||
kind: None,
|
kind: None,
|
||||||
text_edit: None,
|
text_edit: None,
|
||||||
|
@ -90,6 +92,10 @@ impl CompletionItem {
|
||||||
pub fn detail(&self) -> Option<&str> {
|
pub fn detail(&self) -> Option<&str> {
|
||||||
self.detail.as_ref().map(|it| it.as_str())
|
self.detail.as_ref().map(|it| it.as_str())
|
||||||
}
|
}
|
||||||
|
/// A doc-comment
|
||||||
|
pub fn documentation(&self) -> Option<&str> {
|
||||||
|
self.documentation.as_ref().map(|it| it.as_str())
|
||||||
|
}
|
||||||
/// What string is used for filtering.
|
/// What string is used for filtering.
|
||||||
pub fn lookup(&self) -> &str {
|
pub fn lookup(&self) -> &str {
|
||||||
self.lookup
|
self.lookup
|
||||||
|
@ -127,6 +133,7 @@ pub(crate) struct Builder {
|
||||||
insert_text: Option<String>,
|
insert_text: Option<String>,
|
||||||
insert_text_format: InsertTextFormat,
|
insert_text_format: InsertTextFormat,
|
||||||
detail: Option<String>,
|
detail: Option<String>,
|
||||||
|
documentation: Option<String>,
|
||||||
lookup: Option<String>,
|
lookup: Option<String>,
|
||||||
kind: Option<CompletionItemKind>,
|
kind: Option<CompletionItemKind>,
|
||||||
text_edit: Option<TextEdit>,
|
text_edit: Option<TextEdit>,
|
||||||
|
@ -142,6 +149,7 @@ impl Builder {
|
||||||
source_range: self.source_range,
|
source_range: self.source_range,
|
||||||
label: self.label,
|
label: self.label,
|
||||||
detail: self.detail,
|
detail: self.detail,
|
||||||
|
documentation: self.documentation,
|
||||||
insert_text_format: self.insert_text_format,
|
insert_text_format: self.insert_text_format,
|
||||||
lookup: self.lookup,
|
lookup: self.lookup,
|
||||||
kind: self.kind,
|
kind: self.kind,
|
||||||
|
@ -184,6 +192,14 @@ impl Builder {
|
||||||
self.detail = detail.map(Into::into);
|
self.detail = detail.map(Into::into);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
#[allow(unused)]
|
||||||
|
pub(crate) fn documentation(self, docs: impl Into<String>) -> Builder {
|
||||||
|
self.set_documentation(Some(docs))
|
||||||
|
}
|
||||||
|
pub(crate) fn set_documentation(mut self, docs: Option<impl Into<String>>) -> Builder {
|
||||||
|
self.documentation = docs.map(Into::into);
|
||||||
|
self
|
||||||
|
}
|
||||||
pub(super) fn from_resolution(
|
pub(super) fn from_resolution(
|
||||||
mut self,
|
mut self,
|
||||||
ctx: &CompletionContext,
|
ctx: &CompletionContext,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use lsp_types::{
|
use lsp_types::{
|
||||||
self, CreateFile, DocumentChangeOperation, DocumentChanges, Location, LocationLink,
|
self, CreateFile, Documentation, DocumentChangeOperation, DocumentChanges, Location, LocationLink,
|
||||||
Position, Range, RenameFile, ResourceOp, SymbolKind, TextDocumentEdit, TextDocumentIdentifier,
|
MarkupContent, MarkupKind, Position, Range, RenameFile, ResourceOp, SymbolKind, TextDocumentEdit, TextDocumentIdentifier,
|
||||||
TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier,
|
TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier,
|
||||||
WorkspaceEdit,
|
WorkspaceEdit,
|
||||||
};
|
};
|
||||||
|
@ -87,6 +87,13 @@ impl ConvWith for CompletionItem {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let documentation = self.documentation().map(|value| {
|
||||||
|
Documentation::MarkupContent(MarkupContent {
|
||||||
|
kind: MarkupKind::Markdown,
|
||||||
|
value: value.to_string(),
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
let mut res = lsp_types::CompletionItem {
|
let mut res = lsp_types::CompletionItem {
|
||||||
label: self.label().to_string(),
|
label: self.label().to_string(),
|
||||||
detail: self.detail().map(|it| it.to_string()),
|
detail: self.detail().map(|it| it.to_string()),
|
||||||
|
@ -94,6 +101,7 @@ impl ConvWith for CompletionItem {
|
||||||
kind: self.kind().map(|it| it.conv()),
|
kind: self.kind().map(|it| it.conv()),
|
||||||
text_edit: Some(text_edit),
|
text_edit: Some(text_edit),
|
||||||
additional_text_edits,
|
additional_text_edits,
|
||||||
|
documentation: documentation,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
res.insert_text_format = Some(match self.insert_text_format() {
|
res.insert_text_format = Some(match self.insert_text_format() {
|
||||||
|
|
Loading…
Reference in New Issue