From f59c9f7f500be3b42ea184e96f747549f006099d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 12 Oct 2026 02:49:00 -0400 Subject: [PATCH] documents: a text past the read limit drops the old read Co-Authored-By: Claude Opus 5.5 (1M context) --- src/documents/document/mod.rs | 8 +++++++- src/documents/document/tests/mod.rs | 9 +++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/documents/document/mod.rs b/src/documents/document/mod.rs index ba642ed..8c8739a 100644 --- a/src/documents/document/mod.rs +++ b/src/documents/document/mod.rs @@ -234,7 +234,13 @@ impl MarkdownDocument { let (text, edits) = (self.editor.read(cx).text().to_string(), self.edits); if text.len() > LARGEST_READ { self._parsing = None; - return log::info!("markdown document: {} bytes, too long to read", text.len()); + log::info!("markdown document: {} bytes, too long to read", text.len()); + // Nothing read: no blocks, no headings. + let unread = Parsed { + text, + ..Parsed::default() + }; + return self.adopt(unread, edits, cx); } if now && text.len() <= AT_ONCE { self._parsing = None; diff --git a/src/documents/document/tests/mod.rs b/src/documents/document/tests/mod.rs index 83c3450..d0d2f30 100644 --- a/src/documents/document/tests/mod.rs +++ b/src/documents/document/tests/mod.rs @@ -387,12 +387,13 @@ fn typed_source_reads_after_a_pause(cx: &mut TestAppContext) { #[gpui::test] fn a_text_past_the_largest_read_is_never_read(cx: &mut TestAppContext) { + let (document, cx) = open("# Old\n", MarkdownMode::Source, cx); let long = "a\n".repeat(super::LARGEST_READ / 2 + 1); - let (document, cx) = open(&long, MarkdownMode::Source, cx); + document.update(cx, |document, cx| document.set_text(long, cx)); cx.executor().advance_clock(super::PAUSE); cx.run_until_parked(); - let (read, outline) = document.read_with(cx, |document, cx| { - (document.read_now(cx), document.outline(cx).len()) + let (blocks, outline) = document.read_with(cx, |document, cx| { + (document.parsed.blocks.len(), document.outline(cx).len()) }); - assert!(!read && outline == 0); + assert_eq!((blocks, outline), (0, 0), "the old read is gone"); }