Fix panic in Diagnostics (#11066)

cc @maxbrunsfeld

Release Notes:

- Fixed a panic in populating diagnostics
This commit is contained in:
Conrad Irwin 2024-04-26 14:04:18 -06:00 committed by GitHub
parent 9329ef1d78
commit e0644de90e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -859,20 +859,25 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock {
})
}
fn compare_diagnostics<L: language::ToOffset, R: language::ToOffset>(
lhs: &DiagnosticEntry<L>,
rhs: &DiagnosticEntry<R>,
fn compare_diagnostics(
old: &DiagnosticEntry<language::Anchor>,
new: &DiagnosticEntry<language::Anchor>,
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))
}