@@ -4660,18 +4660,28 @@ fn hover(cx: &mut Context) {
4660 move |editor: &mut Editor, compositor: &mut Compositor, response: Option<lsp::Hover>| {
4660 move |editor: &mut Editor, compositor: &mut Compositor, response: Option<lsp::Hover>| {
4661 if let Some(hover) = response {
4661 if let Some(hover) = response {
4662 // hover.contents / .range <- used for visualizing
4662 // hover.contents / .range <- used for visualizing
4664+ fn marked_string_to_markdown(contents: lsp::MarkedString) -> String {
4663− let contents = match hover.contents {
4665+ match contents {
4664− lsp::HoverContents::Scalar(contents) => {
4666+ lsp::MarkedString::String(contents) => contents,
4665− // markedstring(string/languagestring to be highlighted)
4667+ lsp::MarkedString::LanguageString(string) => {
4666− // TODO
4668+ log::error!("MarkedString {}: {}", string.language, string.value);
4667− log::error!("hover contents {:?}", contents);
4669+ if string.language == "markdown" {
4668− return;
4670+ string.value
4670− lsp::HoverContents::Array(contents) => {
4672+ format!("```{}\n{}\n```", string.language, string.value)
4671− log::error!("hover contents {:?}", contents);
4673+ }
4674− // TODO: render markdown
4676+ }
4678+ let contents = match hover.contents {
4679+ lsp::HoverContents::Scalar(contents) => marked_string_to_markdown(contents),
4680+ lsp::HoverContents::Array(contents) => contents
4682+ .map(marked_string_to_markdown)
4683+ .collect::<Vec<_>>()
4675 lsp::HoverContents::Markup(contents) => contents.value,
4685 lsp::HoverContents::Markup(contents) => contents.value,