mirror of https://github.com/helix-editor/helix
Refactor our Markdown construction in completion doc
parent
937825e8fc
commit
0f844ef191
|
@ -399,6 +399,16 @@ impl Component for Completion {
|
||||||
.expect("cursor must be in view");
|
.expect("cursor must be in view");
|
||||||
let cursor_pos = coords.row as u16;
|
let cursor_pos = coords.row as u16;
|
||||||
|
|
||||||
|
let markdowned = |lang: &str, detail: Option<&str>, doc: Option<&str>| {
|
||||||
|
let md = match (detail, doc) {
|
||||||
|
(Some(detail), Some(doc)) => format!("```{lang}\n{detail}\n```\n{doc}"),
|
||||||
|
(Some(detail), None) => format!("```{lang}\n{detail}\n```"),
|
||||||
|
(None, Some(doc)) => doc.to_string(),
|
||||||
|
(None, None) => String::new(),
|
||||||
|
};
|
||||||
|
Markdown::new(md, cx.editor.syn_loader.clone())
|
||||||
|
};
|
||||||
|
|
||||||
let mut markdown_doc = match &option.documentation {
|
let mut markdown_doc = match &option.documentation {
|
||||||
Some(lsp::Documentation::String(contents))
|
Some(lsp::Documentation::String(contents))
|
||||||
| Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
|
| Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
|
||||||
|
@ -406,42 +416,18 @@ impl Component for Completion {
|
||||||
value: contents,
|
value: contents,
|
||||||
})) => {
|
})) => {
|
||||||
// TODO: convert to wrapped text
|
// TODO: convert to wrapped text
|
||||||
Markdown::new(
|
markdowned(language, option.detail.as_deref(), Some(contents))
|
||||||
format!(
|
|
||||||
"```{}\n{}\n```\n{}",
|
|
||||||
language,
|
|
||||||
option.detail.as_deref().unwrap_or_default(),
|
|
||||||
contents
|
|
||||||
),
|
|
||||||
cx.editor.syn_loader.clone(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
|
Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
|
||||||
kind: lsp::MarkupKind::Markdown,
|
kind: lsp::MarkupKind::Markdown,
|
||||||
value: contents,
|
value: contents,
|
||||||
})) => {
|
})) => {
|
||||||
// TODO: set language based on doc scope
|
// TODO: set language based on doc scope
|
||||||
if let Some(detail) = &option.detail.as_deref() {
|
markdowned(language, option.detail.as_deref(), Some(contents))
|
||||||
Markdown::new(
|
|
||||||
format!("```{}\n{}\n```\n{}", language, detail, contents),
|
|
||||||
cx.editor.syn_loader.clone(),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Markdown::new(contents.to_string(), cx.editor.syn_loader.clone())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
None if option.detail.is_some() => {
|
None if option.detail.is_some() => {
|
||||||
// TODO: copied from above
|
|
||||||
|
|
||||||
// TODO: set language based on doc scope
|
// TODO: set language based on doc scope
|
||||||
Markdown::new(
|
markdowned(language, option.detail.as_deref(), None)
|
||||||
format!(
|
|
||||||
"```{}\n{}\n```",
|
|
||||||
language,
|
|
||||||
option.detail.as_deref().unwrap_or_default(),
|
|
||||||
),
|
|
||||||
cx.editor.syn_loader.clone(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue