Skip to content

Commit

Permalink
fix(Diagnostic): remove usage of unsafe code from Infallible impl
Browse files Browse the repository at this point in the history
  • Loading branch information
caass committed Aug 20, 2024
1 parent a2bea99 commit 35d0f07
Showing 1 changed file with 9 additions and 13 deletions.
22 changes: 9 additions & 13 deletions src/diagnostic_impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
}
}

Expand Down

0 comments on commit 35d0f07

Please sign in to comment.