on master help sign in
Implement MarkedString rendering

Solves typescript and python documentation rendering

commite128a8702eda3d449cfe355b853724d18b03a977 authorBlaž Hrastnik <blaz@mxxn.io> dateMon 15 Nov 2021, 10:29 (5 years ago) parent8f7ada1
1 file changed+21−11
helix-term/src/commands.rs+21−11
helix-term/src/commands.rs+21−11
@@ -4660,18 +4660,28 @@ fn hover(cx: &mut Context) {
46604660 move |editor: &mut Editor, compositor: &mut Compositor, response: Option<lsp::Hover>| {
46614661 if let Some(hover) = response {
46624662 // hover.contents / .range <- used for visualizing
4663− let contents = match hover.contents {
4664− lsp::HoverContents::Scalar(contents) => {
4665− // markedstring(string/languagestring to be highlighted)
4666− // TODO
4667− log::error!("hover contents {:?}", contents);
4668− return;
4669− }
4670− lsp::HoverContents::Array(contents) => {
4671− log::error!("hover contents {:?}", contents);
4672− return;
4663+
4664+ fn marked_string_to_markdown(contents: lsp::MarkedString) -> String {
4665+ match contents {
4666+ lsp::MarkedString::String(contents) => contents,
4667+ lsp::MarkedString::LanguageString(string) => {
4668+ log::error!("MarkedString {}: {}", string.language, string.value);
4669+ if string.language == "markdown" {
4670+ string.value
4671+ } else {
4672+ format!("```{}\n{}\n```", string.language, string.value)
4673+ }
4674+ }
46734675 }
4674− // TODO: render markdown
4676+ }
4677+
4678+ let contents = match hover.contents {
4679+ lsp::HoverContents::Scalar(contents) => marked_string_to_markdown(contents),
4680+ lsp::HoverContents::Array(contents) => contents
4681+ .into_iter()
4682+ .map(marked_string_to_markdown)
4683+ .collect::<Vec<_>>()
4684+ .join("\n\n"),
46754685 lsp::HoverContents::Markup(contents) => contents.value,
46764686 };
46774687