From e0644de90e22186e847415c8a1fc26c93f9d738c Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Fri, 26 Apr 2024 14:04:18 -0600 Subject: [PATCH] Fix panic in Diagnostics (#11066) cc @maxbrunsfeld Release Notes: - Fixed a panic in populating diagnostics --- crates/diagnostics/src/diagnostics.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index d06ff824fb..0fbacf4743 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -859,20 +859,25 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock { }) } -fn compare_diagnostics( - lhs: &DiagnosticEntry, - rhs: &DiagnosticEntry, +fn compare_diagnostics( + old: &DiagnosticEntry, + new: &DiagnosticEntry, snapshot: &language::BufferSnapshot, ) -> Ordering { - lhs.range + use language::ToOffset; + // The old diagnostics may point to a previously open Buffer for this file. + if !old.range.start.is_valid(snapshot) { + return Ordering::Greater; + } + old.range .start .to_offset(snapshot) - .cmp(&rhs.range.start.to_offset(snapshot)) + .cmp(&new.range.start.to_offset(snapshot)) .then_with(|| { - lhs.range + old.range .end .to_offset(snapshot) - .cmp(&rhs.range.end.to_offset(snapshot)) + .cmp(&new.range.end.to_offset(snapshot)) }) - .then_with(|| lhs.diagnostic.message.cmp(&rhs.diagnostic.message)) + .then_with(|| old.diagnostic.message.cmp(&new.diagnostic.message)) }