aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/ui/completion.rs40
1 files changed, 13 insertions, 27 deletions
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs
index 6263106c..7492b065 100644
--- a/helix-term/src/ui/completion.rs
+++ b/helix-term/src/ui/completion.rs
@@ -399,6 +399,16 @@ impl Component for Completion {
.expect("cursor must be in view");
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 {
Some(lsp::Documentation::String(contents))
| Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
@@ -406,42 +416,18 @@ impl Component for Completion {
value: contents,
})) => {
// TODO: convert to wrapped text
- Markdown::new(
- format!(
- "```{}\n{}\n```\n{}",
- language,
- option.detail.as_deref().unwrap_or_default(),
- contents
- ),
- cx.editor.syn_loader.clone(),
- )
+ markdowned(language, option.detail.as_deref(), Some(contents))
}
Some(lsp::Documentation::MarkupContent(lsp::MarkupContent {
kind: lsp::MarkupKind::Markdown,
value: contents,
})) => {
// TODO: set language based on doc scope
- if let Some(detail) = &option.detail.as_deref() {
- 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())
- }
+ markdowned(language, option.detail.as_deref(), Some(contents))
}
None if option.detail.is_some() => {
- // TODO: copied from above
-
// TODO: set language based on doc scope
- Markdown::new(
- format!(
- "```{}\n{}\n```",
- language,
- option.detail.as_deref().unwrap_or_default(),
- ),
- cx.editor.syn_loader.clone(),
- )
+ markdowned(language, option.detail.as_deref(), None)
}
None => return,
};