From b13940720a9091793ebe60bfbe5c12c6114ce2af Mon Sep 17 00:00:00 2001 From: Bennet Bo Fenner Date: Sun, 27 Oct 2024 14:34:59 +0100 Subject: [PATCH] markdown preview: Ignore inline HTML tags in text (#19804) Follow up to #19785 This PR ensures that we explicitly ignore inline HTML tags so that we can still extract the text between the tags and show them to the user Release Notes: - N/A --- .../markdown_preview/src/markdown_parser.rs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/crates/markdown_preview/src/markdown_parser.rs b/crates/markdown_preview/src/markdown_parser.rs index 0b3c361fd261d1061ac360240d1c2fb21567b2e3..d514b89e52c948b216553164bc7504bcc3008b4c 100644 --- a/crates/markdown_preview/src/markdown_parser.rs +++ b/crates/markdown_preview/src/markdown_parser.rs @@ -234,6 +234,10 @@ impl<'a> MarkdownParser<'a> { text.push('\n'); } + // We want to ignore any inline HTML tags in the text but keep + // the text between them + Event::InlineHtml(_) => {} + Event::Text(t) => { text.push_str(t.as_ref()); @@ -849,6 +853,16 @@ mod tests { ); } + #[gpui::test] + async fn test_text_with_inline_html() { + let parsed = parse("This is a paragraph with an inline HTML tag.").await; + + assert_eq!( + parsed.children, + vec![p("This is a paragraph with an inline HTML tag.", 0..63),], + ); + } + #[gpui::test] async fn test_raw_links_detection() { let parsed = parse("Checkout this https://zed.dev link").await; @@ -1092,6 +1106,26 @@ Some other content ); } + #[gpui::test] + async fn test_list_item_with_inline_html() { + let parsed = parse( + "\ +* This is a list item with an inline HTML tag. +", + ) + .await; + + assert_eq!( + parsed.children, + vec![list_item( + 0..67, + 1, + Unordered, + vec![p("This is a list item with an inline HTML tag.", 4..44),], + ),], + ); + } + #[gpui::test] async fn test_nested_list_with_paragraph_inside() { let parsed = parse(