1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
use lsp_types::{CompletionItemKind, CompletionParams, Documentation, MarkupContent, MarkupKind};
use smol_str::SmolStr;
use crate::features::FeatureRequest;
pub fn component_detail(file_names: &[SmolStr]) -> String {
if file_names.is_empty() {
"built-in".to_owned()
} else {
file_names.join(", ")
}
}
pub fn image_documentation(
request: &FeatureRequest<CompletionParams>,
name: &str,
image: &str,
) -> Option<Documentation> {
if supports_images(request) {
Some(Documentation::MarkupContent(MarkupContent {
kind: MarkupKind::Markdown,
value: format!(
"![{}](data:image/png;base64,{}|width=48,height=48)",
name, image
),
}))
} else {
None
}
}
fn supports_images(request: &FeatureRequest<CompletionParams>) -> bool {
request
.context
.client_capabilities
.lock()
.unwrap()
.text_document
.as_ref()
.and_then(|cap| cap.completion.as_ref())
.and_then(|cap| cap.completion_item.as_ref())
.and_then(|cap| cap.documentation_format.as_ref())
.map_or(true, |formats| formats.contains(&MarkupKind::Markdown))
}
pub fn adjust_kind(
request: &FeatureRequest<CompletionParams>,
kind: CompletionItemKind,
) -> CompletionItemKind {
if let Some(value_set) = request
.context
.client_capabilities
.lock()
.unwrap()
.text_document
.as_ref()
.and_then(|cap| cap.completion.as_ref())
.and_then(|cap| cap.completion_item_kind.as_ref())
.and_then(|cap| cap.value_set.as_ref())
{
if value_set.contains(&kind) {
return kind;
}
}
CompletionItemKind::Text
}
|