fix(Diagnostic): remove usage of unsafe code from `Infallible` impl

This commit is contained in:
Cass Fridkin 2024-08-19 21:47:30 -06:00
parent a2bea9990e
commit 35d0f077c1
No known key found for this signature in database
1 changed files with 9 additions and 13 deletions

View File

@ -2,45 +2,41 @@
Default trait implementations for [`Diagnostic`].
*/
use std::{convert::Infallible, fmt::Display, hint::unreachable_unchecked};
use std::{convert::Infallible, fmt::Display};
use crate::{Diagnostic, LabeledSpan, Severity, SourceCode};
// Since all trait methods for [`Diagnostic`] take a reference to `self`, there must be an instance of `Self`.
// However, since an instance of [`Infallible`] can never be constructed, these methods can never be called.
// Therefore, these methods are unreachable, and can be safely optimized away by the compiler.
#[allow(clippy::undocumented_unsafe_blocks)]
impl Diagnostic for Infallible {
fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn severity(&self) -> Option<Severity> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn source_code(&self) -> Option<&dyn SourceCode> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn related<'a>(&'a self) -> Option<Box<dyn Iterator<Item = &'a dyn Diagnostic> + 'a>> {
unsafe { unreachable_unchecked() }
match *self {}
}
fn diagnostic_source(&self) -> Option<&dyn Diagnostic> {
unsafe { unreachable_unchecked() }
match *self {}
}
}