diff --git a/src/diagnostic_impls.rs b/src/diagnostic_impls.rs index c13dc93..aebe56b 100644 --- a/src/diagnostic_impls.rs +++ b/src/diagnostic_impls.rs @@ -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> { - unsafe { unreachable_unchecked() } + match *self {} } fn severity(&self) -> Option { - unsafe { unreachable_unchecked() } + match *self {} } fn help<'a>(&'a self) -> Option> { - unsafe { unreachable_unchecked() } + match *self {} } fn url<'a>(&'a self) -> Option> { - unsafe { unreachable_unchecked() } + match *self {} } fn source_code(&self) -> Option<&dyn SourceCode> { - unsafe { unreachable_unchecked() } + match *self {} } fn labels(&self) -> Option + '_>> { - unsafe { unreachable_unchecked() } + match *self {} } fn related<'a>(&'a self) -> Option + 'a>> { - unsafe { unreachable_unchecked() } + match *self {} } fn diagnostic_source(&self) -> Option<&dyn Diagnostic> { - unsafe { unreachable_unchecked() } + match *self {} } }