From 55e1e831a12fc0fb1754187bf7cb98747f2a9bd8 Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Thu, 16 Jan 2025 03:56:46 -0700 Subject: [PATCH] Make language registry optional in `parse_markdown` (#23221) Motivation for this is using markdown for keymap error notifications in #23113 Release Notes: - N/A --- crates/editor/src/git/blame.rs | 2 +- crates/editor/src/signature_help.rs | 2 +- crates/language/src/buffer.rs | 2 +- crates/language/src/markdown.rs | 15 +++++++++------ crates/project/src/lsp_store.rs | 3 ++- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/crates/editor/src/git/blame.rs b/crates/editor/src/git/blame.rs index b4fe2efec6ac8f94a94a1f92d4fbd0e11f61171a..fed7b48d1219dee28c09d848bc20a6368e20d588 100644 --- a/crates/editor/src/git/blame.rs +++ b/crates/editor/src/git/blame.rs @@ -538,7 +538,7 @@ async fn parse_markdown(text: &str, language_registry: &Arc) - markdown::parse_markdown_block( text, - language_registry, + Some(language_registry), None, &mut parsed_message.text, &mut parsed_message.highlights, diff --git a/crates/editor/src/signature_help.rs b/crates/editor/src/signature_help.rs index 0076887551a8b3242e3fb666bfa23516e1ef5cbe..ae886ff30e63412102364f5851190530f94ae03d 100644 --- a/crates/editor/src/signature_help.rs +++ b/crates/editor/src/signature_help.rs @@ -189,7 +189,7 @@ impl Editor { if let Some(mut signature_help) = signature_help_task.await.into_iter().next() { let mut parsed_content = parse_markdown( signature_help.markdown.as_str(), - &language_registry, + Some(&language_registry), language, ) .await; diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index c5033d2251a2d8f88f5f4eea1e590a13649deb0f..57557e5a369e973b2c09ba7b8af358d09fcdf3fe 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -256,7 +256,7 @@ pub async fn prepare_completion_documentation( } lsp::MarkupKind::Markdown => { - let parsed = parse_markdown(value, language_registry, language).await; + let parsed = parse_markdown(value, Some(language_registry), language).await; Documentation::MultiLineMarkdown(parsed) } }, diff --git a/crates/language/src/markdown.rs b/crates/language/src/markdown.rs index 0221f0f431bcc07988b929da3f91426132a18aa8..9f823e53e575894149d5916fc9082afcc9968b02 100644 --- a/crates/language/src/markdown.rs +++ b/crates/language/src/markdown.rs @@ -121,7 +121,7 @@ impl Link { /// Parses a string of Markdown. pub async fn parse_markdown( markdown: &str, - language_registry: &Arc, + language_registry: Option<&Arc>, language: Option>, ) -> ParsedMarkdown { let mut text = String::new(); @@ -151,7 +151,7 @@ pub async fn parse_markdown( /// Parses a Markdown block. pub async fn parse_markdown_block( markdown: &str, - language_registry: &Arc, + language_registry: Option<&Arc>, language: Option>, text: &mut String, highlights: &mut Vec<(Range, MarkdownHighlight)>, @@ -247,10 +247,13 @@ pub async fn parse_markdown_block( Tag::CodeBlock(kind) => { new_paragraph(text, &mut list_stack); current_language = if let CodeBlockKind::Fenced(language) = kind { - language_registry - .language_for_name_or_extension(language.as_ref()) - .await - .ok() + match language_registry { + None => None, + Some(language_registry) => language_registry + .language_for_name_or_extension(language.as_ref()) + .await + .ok(), + } } else { language.clone() } diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 372f06bbf6fb86c0360b0675b7e85ba47f9b93d6..60c8487f840bcbf5e3f35558106b994676d86acd 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -4418,7 +4418,8 @@ impl LspStore { Documentation::Undocumented } else if response.documentation_is_markdown { Documentation::MultiLineMarkdown( - markdown::parse_markdown(&response.documentation, &language_registry, None).await, + markdown::parse_markdown(&response.documentation, Some(&language_registry), None) + .await, ) } else if response.documentation.lines().count() <= 1 { Documentation::SingleLine(response.documentation)