Wait for language to load when parsing markdown

This commit is contained in:
Julia
2023-10-06 13:26:39 -04:00
parent ea6f366d23
commit a881b1f5fb
4 changed files with 137 additions and 92 deletions
+3 -3
View File
@@ -7,7 +7,7 @@ pub use crate::{
use crate::{
diagnostic_set::{DiagnosticEntry, DiagnosticGroup},
language_settings::{language_settings, LanguageSettings},
markdown,
markdown::parse_markdown,
outline::OutlineItem,
syntax_map::{
SyntaxLayerInfo, SyntaxMap, SyntaxMapCapture, SyntaxMapCaptures, SyntaxMapMatches,
@@ -145,7 +145,7 @@ pub struct Diagnostic {
pub is_unnecessary: bool,
}
pub fn prepare_completion_documentation(
pub async fn prepare_completion_documentation(
documentation: &lsp::Documentation,
language_registry: &Arc<LanguageRegistry>,
language: Option<Arc<Language>>,
@@ -170,7 +170,7 @@ pub fn prepare_completion_documentation(
}
lsp::MarkupKind::Markdown => {
let parsed = markdown::parse_markdown(value, language_registry, language, style);
let parsed = parse_markdown(value, language_registry, language, style).await;
Some(Documentation::MultiLineMarkdown(parsed))
}
},
+6 -6
View File
@@ -2,7 +2,6 @@ use std::ops::Range;
use std::sync::Arc;
use crate::{Language, LanguageRegistry};
use futures::FutureExt;
use gpui::fonts::{HighlightStyle, Underline, Weight};
use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag};
@@ -20,7 +19,7 @@ pub struct ParsedRegion {
pub link_url: Option<String>,
}
pub fn parse_markdown(
pub async fn parse_markdown(
markdown: &str,
language_registry: &Arc<LanguageRegistry>,
language: Option<Arc<Language>>,
@@ -40,7 +39,8 @@ pub fn parse_markdown(
&mut highlights,
&mut region_ranges,
&mut regions,
);
)
.await;
ParsedMarkdown {
text,
@@ -50,7 +50,7 @@ pub fn parse_markdown(
}
}
pub fn parse_markdown_block(
pub async fn parse_markdown_block(
markdown: &str,
language_registry: &Arc<LanguageRegistry>,
language: Option<Arc<Language>>,
@@ -143,8 +143,8 @@ pub fn parse_markdown_block(
current_language = if let CodeBlockKind::Fenced(language) = kind {
language_registry
.language_for_name(language.as_ref())
.now_or_never()
.and_then(Result::ok)
.await
.ok()
} else {
language.clone()
}