feat: show sources on alternate display#520
Draft
Frando wants to merge 2 commits intoshepmaster:mainfrom
Draft
Conversation
❌ Deploy Preview for shepmaster-snafu failed.
|
shepmaster
requested changes
Oct 15, 2025
Owner
shepmaster
left a comment
There was a problem hiding this comment.
I do not expect to accept this PR in the current form:
- I do not think that every error type constructed by SNAFU should have this functionality (increasing the amount of code generated).
- Putting sources in
Display, even through the alternate formatter, counteracts the guidance to not do so.
Instead, I could instead see this being an alternate to Report for the cases where you need a single-line error. For example:
tracing::warn!("{}", ReportOneline::new(err));
Implementation-wise, this should use CleanedErrorText (when the right feature(s) are enabled) to avoid repeating the error text from errors that already don't follow the guidelines.
but without needing to take ownership of the error (which
Reportrequireds)
It does not:
use snafu::prelude::*;
#[derive(Debug, Snafu)]
struct ExampleError;
fn main() {
let e = ExampleError;
let r = snafu::Report::from_error(&e);
println!("{r}");
}I'd expect a hypothetical ReportOneline to behave similarly.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements a fix to #390:
When printing an error that has the
Snafuderive with the alternate display formatter ({err:#}), the list of sources is attached, similar to how anyhow does it.This is similar to the
Report, but without needing to take ownership of the error (whichReportrequireds) and without spreading the display over multiple lines.It is especially useful when logging errors while also bubbling them up. We frequently want to log errors, and currently this will not print the source chain, rendering the log mostly irrelevant. With this change, you can do
And get a log like
(from the
simpleexample - which I can remove of course if this PR is being considered for merging).