From 4fd2b3f374a7ea0d010e3897893bf0ccd55ae7ca Mon Sep 17 00:00:00 2001 From: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Date: Tue, 4 Nov 2025 19:43:24 +0100 Subject: [PATCH] editor: Jumping to diagnostics unfolds target locations (#41932) Release Notes: - Jumping to diagnostics no longer skips over folded regions. The folded region that contains a target diagnostic is now unfolded. --- crates/editor/src/editor.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 9d2e2fc741c2ccce21a41fee4f9f32f20b1d33ab..1fd387133dc841c96c363cc43451cef0c202473f 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -16025,7 +16025,6 @@ impl Editor { } fn filtered<'a>( - snapshot: EditorSnapshot, severity: GoToDiagnosticSeverityFilter, diagnostics: impl Iterator>, ) -> impl Iterator> { @@ -16033,19 +16032,15 @@ impl Editor { .filter(move |entry| severity.matches(entry.diagnostic.severity)) .filter(|entry| entry.range.start != entry.range.end) .filter(|entry| !entry.diagnostic.is_unnecessary) - .filter(move |entry| !snapshot.intersects_fold(entry.range.start)) } - let snapshot = self.snapshot(window, cx); let before = filtered( - snapshot.clone(), severity, buffer .diagnostics_in_range(0..selection.start) .filter(|entry| entry.range.start <= selection.start), ); let after = filtered( - snapshot, severity, buffer .diagnostics_in_range(selection.start..buffer.len()) @@ -16084,6 +16079,15 @@ impl Editor { let Some(buffer_id) = buffer.buffer_id_for_anchor(next_diagnostic_start) else { return; }; + let snapshot = self.snapshot(window, cx); + if snapshot.intersects_fold(next_diagnostic.range.start) { + self.unfold_ranges( + std::slice::from_ref(&next_diagnostic.range), + true, + false, + cx, + ); + } self.change_selections(Default::default(), window, cx, |s| { s.select_ranges(vec![ next_diagnostic.range.start..next_diagnostic.range.start,