Refactor our Markdown construction in completion doc

pull/5914/head
Gokul Soumya 2 years ago committed by Blaž Hrastnik
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…
Cancel
Save