Comments (4)
actuallly I don't think we need this, if we have #[error(transparent)]
already...
from miette.
@zkat This is still necessary. Just placing #[error(transparent)]
on a single item enum variant doesn't do anything WRT the Diagnostic implementation. It needs to generate code that implements Diagnostic through the inner type, the way thiserror's does for the Display
and Error::backtrace
etc implementations.
Thiserror does give you the From implementation via Variant(#[from] Inner)
for free.
The use case for miette is pretty obvious, same as thiserror's, but for some context, I'm doing this:
#[derive(Debug, Error, Diagnostic)]
enum Diag {
#[error(transparent)] #[diagnostic(transparent)] Error(#[from] Error),
// The rest of the variants go here, all warnings/advice, no errors
}
// this would be weird -- you could fail your whole thing because of a warning
fn bad_function(...) -> Result<i32, Diag> {}
// this way your Err case is never a warning, so you are never in the situation where
// there is only a warning but you don't have an Ok value to continue with
fn better_function(...) -> Result<i32, Error> {}
from miette.
There is another way, which is to box all of your diagnostics and let the dynamism do the work. But sometimes you don't want to erase all the types, if you're like me (the guy from twitter who wanted to collect all the diagnostics into a Vec and expose them to library users) then maybe you just want the one type. The code
goes a long way but I'm not sure.
You might also want to delegate only some of the Diagnostic implementation. I'm thinking about having a lot of different variants where practically every single one has a source, a snippet and an optional hint. Being able to forward the snippet implementation to a single struct Snip
but provide a new code
etc would be very useful.
from miette.
I'm having a crack at a PR for this
from miette.
Related Issues (20)
- Potentially broken word wrapping on `main` HOT 3
- Update owo-colors to v4? HOT 5
- Can't get `syntect-highlighter` to work HOT 3
- Remove severity from diagnostic output HOT 1
- Add `UnwrapPretty` trait HOT 5
- Compile to wasm32-unknown-unknown / Compile without `terminal_size` HOT 4
- Errors with zero-length span and no context lines are mostly pointless HOT 1
- 要是错误提示能使用中文输出就好了! HOT 5
- Failing tests with `--all-features` HOT 1
- Feature request: output an error as `json::Value` or `serde_json::Value` directly HOT 2
- Feature request: Span line limit for diagnostics HOT 3
- Help: Sub Errors HOT 3
- Is there a reason that `Report` doesn't implement `Error` and `Diagnostic`? HOT 2
- Converting a `Report` to a `Box<dyn Diagnostic>` wipes all `Diagnostic` information HOT 1
- Improve compilation speed by reducing expanded llvm lines HOT 4
- Add `#[cold]` to some of the constructor functions HOT 3
- `#[label]` derive doesn't seem to work with `Option<T>` where `T` implements `Into<SourceSpan>` but not `Copy`
- NO_COLOR is printing ansi in non-terminals HOT 1
- Reformatting a URL resulting in `(link)` not moving HOT 4
- Render diagnostics without exiting? HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from miette.