From cf49194819f25902675c32bdcc9b2a37a7bf67ce Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 16 Oct 2025 15:42:10 +0200 Subject: [PATCH] markdown_preview: Fix alt text causing mismatched highlighting runs (#40374) Fixes ZED-277 Release Notes: - Fixed alt text in markdown preview creating inconsistent highlighting --- .../markdown_preview/src/markdown_parser.rs | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/crates/markdown_preview/src/markdown_parser.rs b/crates/markdown_preview/src/markdown_parser.rs index 2d621b2b2273b169bb60df98c6ec7d2cb8587373..ad175922daaa20508852f36dd4f62ad90199b7ca 100644 --- a/crates/markdown_preview/src/markdown_parser.rs +++ b/crates/markdown_preview/src/markdown_parser.rs @@ -403,6 +403,9 @@ impl<'a> MarkdownParser<'a> { if let Some(mut image) = image.take() { if !text.is_empty() { image.set_alt_text(std::mem::take(&mut text).into()); + mem::take(&mut highlights); + mem::take(&mut region_ranges); + mem::take(&mut regions); } markdown_text_like.push(MarkdownParagraphChunk::Image(image)); } @@ -1271,17 +1274,40 @@ mod tests { panic!("Expected a paragraph"); }; assert_eq!( - paragraph[0], - MarkdownParagraphChunk::Image(Image { - source_range: 0..111, - link: Link::Web { - url: "https://blog.logrocket.com/wp-content/uploads/2024/04/exploring-zed-open-source-code-editor-rust-2.png".to_string(), - }, - alt_text: Some("test".into()), - height: None, - width: None, - },) - ); + paragraph[0], + MarkdownParagraphChunk::Image(Image { + source_range: 0..111, + link: Link::Web { + url: "https://blog.logrocket.com/wp-content/uploads/2024/04/exploring-zed-open-source-code-editor-rust-2.png".to_string(), + }, + alt_text: Some("test".into()), + height: None, + width: None, + },) + ); + } + + #[gpui::test] + async fn test_image_alt_text() { + let parsed = parse("[![Zed](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/zed-industries/zed/main/assets/badge/v0.json)](https://zed.dev)\n ").await; + + let paragraph = if let ParsedMarkdownElement::Paragraph(text) = &parsed.children[0] { + text + } else { + panic!("Expected a paragraph"); + }; + assert_eq!( + paragraph[0], + MarkdownParagraphChunk::Image(Image { + source_range: 0..142, + link: Link::Web { + url: "https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/zed-industries/zed/main/assets/badge/v0.json".to_string(), + }, + alt_text: Some("Zed".into()), + height: None, + width: None, + },) + ); } #[gpui::test]