mirror of https://github.com/zkat/miette.git
refactor: use #[track_caller] directly instead of conditional cfg_attr
This commit is contained in:
parent
9bdf23a659
commit
09e1090b2e
4
build.rs
4
build.rs
|
|
@ -1,8 +1,6 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
// track_caller is stable since Rust 1.46 (2020), so no version check needed
|
// track_caller is always available with our MSRV (Rust ≥ 1.82)
|
||||||
println!("cargo:rustc-cfg=track_caller");
|
|
||||||
|
|
||||||
// Add check-cfg for conditional configurations
|
// Add check-cfg for conditional configurations
|
||||||
println!("cargo:rustc-check-cfg=cfg(doc_cfg)");
|
println!("cargo:rustc-check-cfg=cfg(doc_cfg)");
|
||||||
println!("cargo:rustc-check-cfg=cfg(track_caller)");
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ mod ext {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub trait Diag {
|
pub trait Diag {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn ext_report<D>(self, msg: D) -> Report
|
fn ext_report<D>(self, msg: D) -> Report
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static;
|
D: Display + Send + Sync + 'static;
|
||||||
|
|
@ -24,7 +24,7 @@ mod ext {
|
||||||
where
|
where
|
||||||
E: Diagnostic + Send + Sync + 'static,
|
E: Diagnostic + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn ext_report<D>(self, msg: D) -> Report
|
fn ext_report<D>(self, msg: D) -> Report
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -34,7 +34,7 @@ mod ext {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Diag for Report {
|
impl Diag for Report {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn ext_report<D>(self, msg: D) -> Report
|
fn ext_report<D>(self, msg: D) -> Report
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -45,7 +45,7 @@ mod ext {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> WrapErr<T, Infallible> for Option<T> {
|
impl<T> WrapErr<T, Infallible> for Option<T> {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -56,7 +56,7 @@ impl<T> WrapErr<T, Infallible> for Option<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err_with<D, F>(self, msg: F) -> Result<T, Report>
|
fn wrap_err_with<D, F>(self, msg: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -68,7 +68,7 @@ impl<T> WrapErr<T, Infallible> for Option<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn context<D>(self, msg: D) -> Result<T, Report>
|
fn context<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -76,7 +76,7 @@ impl<T> WrapErr<T, Infallible> for Option<T> {
|
||||||
self.wrap_err(msg)
|
self.wrap_err(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn with_context<D, F>(self, msg: F) -> Result<T, Report>
|
fn with_context<D, F>(self, msg: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -90,7 +90,7 @@ impl<T, E> WrapErr<T, E> for Result<T, E>
|
||||||
where
|
where
|
||||||
E: ext::Diag + Send + Sync + 'static,
|
E: ext::Diag + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -101,7 +101,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err_with<D, F>(self, msg: F) -> Result<T, Report>
|
fn wrap_err_with<D, F>(self, msg: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -113,7 +113,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn context<D>(self, msg: D) -> Result<T, Report>
|
fn context<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -121,7 +121,7 @@ where
|
||||||
self.wrap_err(msg)
|
self.wrap_err(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn with_context<D, F>(self, msg: F) -> Result<T, Report>
|
fn with_context<D, F>(self, msg: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ impl Report {
|
||||||
///
|
///
|
||||||
/// If the error type does not provide a backtrace, a backtrace will be
|
/// If the error type does not provide a backtrace, a backtrace will be
|
||||||
/// created here to ensure that a backtrace exists.
|
/// created here to ensure that a backtrace exists.
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn new<E>(error: E) -> Self
|
pub fn new<E>(error: E) -> Self
|
||||||
where
|
where
|
||||||
|
|
@ -69,7 +69,7 @@ impl Report {
|
||||||
/// .await
|
/// .await
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn msg<M>(message: M) -> Self
|
pub fn msg<M>(message: M) -> Self
|
||||||
where
|
where
|
||||||
|
|
@ -85,7 +85,7 @@ impl Report {
|
||||||
///
|
///
|
||||||
/// Boxed `Diagnostic`s don't implement `Diagnostic` themselves due to trait coherence issues.
|
/// Boxed `Diagnostic`s don't implement `Diagnostic` themselves due to trait coherence issues.
|
||||||
/// This method allows you to create a `Report` from a boxed `Diagnostic`.
|
/// This method allows you to create a `Report` from a boxed `Diagnostic`.
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
pub fn new_boxed(error: Box<dyn Diagnostic + Send + Sync + 'static>) -> Self {
|
pub fn new_boxed(error: Box<dyn Diagnostic + Send + Sync + 'static>) -> Self {
|
||||||
Report::from_boxed(error)
|
Report::from_boxed(error)
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +111,7 @@ impl Report {
|
||||||
unsafe { Report::construct(error, vtable, handler) }
|
unsafe { Report::construct(error, vtable, handler) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub(crate) fn from_adhoc<M>(message: M) -> Self
|
pub(crate) fn from_adhoc<M>(message: M) -> Self
|
||||||
where
|
where
|
||||||
|
|
@ -136,7 +136,7 @@ impl Report {
|
||||||
unsafe { Report::construct(error, vtable, handler) }
|
unsafe { Report::construct(error, vtable, handler) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub(crate) fn from_msg<D, E>(msg: D, error: E) -> Self
|
pub(crate) fn from_msg<D, E>(msg: D, error: E) -> Self
|
||||||
where
|
where
|
||||||
|
|
@ -161,7 +161,7 @@ impl Report {
|
||||||
unsafe { Report::construct(error, vtable, handler) }
|
unsafe { Report::construct(error, vtable, handler) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub(crate) fn from_boxed(error: Box<dyn Diagnostic + Send + Sync>) -> Self {
|
pub(crate) fn from_boxed(error: Box<dyn Diagnostic + Send + Sync>) -> Self {
|
||||||
use super::wrapper::BoxedError;
|
use super::wrapper::BoxedError;
|
||||||
|
|
|
||||||
|
|
@ -38,13 +38,13 @@ inaccessible. If you have a type implementing [`Diagnostic`] consider simply ret
|
||||||
pub trait IntoDiagnostic<T, E> {
|
pub trait IntoDiagnostic<T, E> {
|
||||||
/// Converts [`Result`] types that return regular [`std::error::Error`]s
|
/// Converts [`Result`] types that return regular [`std::error::Error`]s
|
||||||
/// into a [`Result`] that returns a [`Diagnostic`].
|
/// into a [`Result`] that returns a [`Diagnostic`].
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn into_diagnostic(self) -> Result<T, Report>;
|
fn into_diagnostic(self) -> Result<T, Report>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
impl<T, E: std::error::Error + Send + Sync + 'static> IntoDiagnostic<T, E> for Result<T, E> {
|
impl<T, E: std::error::Error + Send + Sync + 'static> IntoDiagnostic<T, E> for Result<T, E> {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn into_diagnostic(self) -> Result<T, Report> {
|
fn into_diagnostic(self) -> Result<T, Report> {
|
||||||
self.map_err(|e| DiagnosticError(Box::new(e)).into())
|
self.map_err(|e| DiagnosticError(Box::new(e)).into())
|
||||||
}
|
}
|
||||||
|
|
@ -52,7 +52,7 @@ impl<T, E: std::error::Error + Send + Sync + 'static> IntoDiagnostic<T, E> for R
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
impl<T, E: Error + Send + Sync + 'static> IntoDiagnostic<T, E> for Result<T, E> {
|
impl<T, E: Error + Send + Sync + 'static> IntoDiagnostic<T, E> for Result<T, E> {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn into_diagnostic(self) -> Result<T, Report> {
|
fn into_diagnostic(self) -> Result<T, Report> {
|
||||||
self.map_err(|e| DiagnosticError(Box::new(e)).into())
|
self.map_err(|e| DiagnosticError(Box::new(e)).into())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ pub trait AdhocKind: Sized {
|
||||||
impl<T> AdhocKind for &T where T: ?Sized + Display + Debug + Send + Sync + 'static {}
|
impl<T> AdhocKind for &T where T: ?Sized + Display + Debug + Send + Sync + 'static {}
|
||||||
|
|
||||||
impl Adhoc {
|
impl Adhoc {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn new<M>(self, message: M) -> Report
|
pub fn new<M>(self, message: M) -> Report
|
||||||
where
|
where
|
||||||
|
|
@ -93,7 +93,7 @@ pub trait TraitKind: Sized {
|
||||||
impl<E> TraitKind for E where E: Into<Report> {}
|
impl<E> TraitKind for E where E: Into<Report> {}
|
||||||
|
|
||||||
impl Trait {
|
impl Trait {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn new<E>(self, error: E) -> Report
|
pub fn new<E>(self, error: E) -> Report
|
||||||
where
|
where
|
||||||
|
|
@ -115,7 +115,7 @@ pub trait BoxedKind: Sized {
|
||||||
impl BoxedKind for Box<dyn Diagnostic + Send + Sync> {}
|
impl BoxedKind for Box<dyn Diagnostic + Send + Sync> {}
|
||||||
|
|
||||||
impl Boxed {
|
impl Boxed {
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn new(self, error: Box<dyn Diagnostic + Send + Sync>) -> Report {
|
pub fn new(self, error: Box<dyn Diagnostic + Send + Sync>) -> Report {
|
||||||
Report::from_boxed(error)
|
Report::from_boxed(error)
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ pub(crate) fn capture_handler(error: &(dyn Diagnostic + 'static)) -> Box<dyn Rep
|
||||||
hook(error)
|
hook(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
pub(crate) fn capture_handler_with_location(
|
pub(crate) fn capture_handler_with_location(
|
||||||
error: &(dyn Diagnostic + 'static),
|
error: &(dyn Diagnostic + 'static),
|
||||||
) -> Box<dyn ReportHandler> {
|
) -> Box<dyn ReportHandler> {
|
||||||
|
|
@ -115,16 +115,11 @@ pub(crate) fn capture_handler_with_location(
|
||||||
DEFAULT.get().unwrap()
|
DEFAULT.get().unwrap()
|
||||||
});
|
});
|
||||||
|
|
||||||
#[cfg(track_caller)]
|
|
||||||
{
|
{
|
||||||
let mut handler = hook(error);
|
let mut handler = hook(error);
|
||||||
handler.track_caller(core::panic::Location::caller());
|
handler.track_caller(core::panic::Location::caller());
|
||||||
handler
|
handler
|
||||||
}
|
}
|
||||||
#[cfg(not(track_caller))]
|
|
||||||
{
|
|
||||||
hook(error)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_default_printer(_err: &(dyn Diagnostic + 'static)) -> Box<dyn ReportHandler + 'static> {
|
fn get_default_printer(_err: &(dyn Diagnostic + 'static)) -> Box<dyn ReportHandler + 'static> {
|
||||||
|
|
@ -454,27 +449,27 @@ pub type Result<T, E = Report> = core::result::Result<T, E>;
|
||||||
/// ```
|
/// ```
|
||||||
pub trait WrapErr<T, E>: context::private::Sealed {
|
pub trait WrapErr<T, E>: context::private::Sealed {
|
||||||
/// Wrap the error value with a new adhoc error
|
/// Wrap the error value with a new adhoc error
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
fn wrap_err<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static;
|
D: Display + Send + Sync + 'static;
|
||||||
|
|
||||||
/// Wrap the error value with a new adhoc error that is evaluated lazily
|
/// Wrap the error value with a new adhoc error that is evaluated lazily
|
||||||
/// only once an error does occur.
|
/// only once an error does occur.
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn wrap_err_with<D, F>(self, f: F) -> Result<T, Report>
|
fn wrap_err_with<D, F>(self, f: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
F: FnOnce() -> D;
|
F: FnOnce() -> D;
|
||||||
|
|
||||||
/// Compatibility re-export of `wrap_err()` for interop with `anyhow`
|
/// Compatibility re-export of `wrap_err()` for interop with `anyhow`
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn context<D>(self, msg: D) -> Result<T, Report>
|
fn context<D>(self, msg: D) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static;
|
D: Display + Send + Sync + 'static;
|
||||||
|
|
||||||
/// Compatibility re-export of `wrap_err_with()` for interop with `anyhow`
|
/// Compatibility re-export of `wrap_err_with()` for interop with `anyhow`
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
fn with_context<D, F>(self, f: F) -> Result<T, Report>
|
fn with_context<D, F>(self, f: F) -> Result<T, Report>
|
||||||
where
|
where
|
||||||
D: Display + Send + Sync + 'static,
|
D: Display + Send + Sync + 'static,
|
||||||
|
|
@ -496,7 +491,7 @@ pub mod private {
|
||||||
pub use super::super::kind::BoxedKind;
|
pub use super::super::kind::BoxedKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(track_caller, track_caller)]
|
#[track_caller]
|
||||||
#[cold]
|
#[cold]
|
||||||
pub fn new_adhoc<M>(message: M) -> Report
|
pub fn new_adhoc<M>(message: M) -> Report
|
||||||
where
|
where
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue