* feat(collection): add label(collection) documentation to lib.rs
* feat(collection): remove repeated formatting of label text
Because of a typo, the label text was being formatted multiple times per
label in a collection. With the fix, the text is formatted only once per
collection
* feat(collection): chain iterators rather than extend vector
Since we are going to iterate anyway, instead of growing the label vector,
chain the iterators. This should be more efficient.
In some cases, this also remove a compilation warning about the label
vector being unnecessarily mutable.
* feat(collection): remove unnecessary `OptionalWrapper`
- In a label collection, there is no need for a `None` label. One should
just not add that label
- Code wise it is also incorrect. The wrapper will be for a vector of
spans, not for individual spans. It happens to work anyway, but this was
not the intended use.
Fixes: https://github.com/zkat/miette/issues/315
Allow errors to have a number of labels determined at runtime.
An example of this is when the rust compiler labels all the arms of
a `match` expression when one of them has an incompatible type
To allow customization of the text for each label in a collection, add
support for using LabeledSpan in collections instead of just regular
spans
* Add more tests for diagnostic_source
* Use Borrow::borrow instead of AsRef
AsRef is not reflexive, meaning that it is not implemented as &T for all
T. Borrow is though, so we use that to make sure that we always get a
reference that is correct, even in the presence of smart pointers.
* Fixed/formatted all intradoc links. Various other small doc fixes/typography/etc.
* Clarified semantic similarity with anyhow/eyre types/macros.
* Removed unused MietteError::SetPrinterFailure.
* README now generaed from lib.rs via `cargo readme`.
* More doc fixes, made ErrorHook type public.
* Indentation (docs).
This PR overhauls the toplevel/main experience for `miette`. It adds a new `Report` type based on `eyre::Report` and overhauls various types to fit into this model, as well as prepare for some [future changes in Rust](https://github.com/nrc/rfcs/pull/1) that will make it possible to integrate `miette` directly with crates like `eyre` instead of having to use this specific `Report`.
As such, this PR is a major breaking change, especially for anyone using `DiagnosticReport` and company.
BREAKING CHANGES:
* `DiagnosticReport` is now just `Report`, and is a different, `eyre::Report`-like type.
* `DiagnosticResult` is now just `Result`.
* `.into_diagnostic()` now just transforms the error into a `Report`.
* `DiagnosticReportPrinter` has been replaced with `ReportHandler`
* `set_printer` has been replaced by `set_hook`
* `code` is now optional.
* `.into_diagnostic()` no longer takes a `code` argument.
* `#[diagnostic]` is now optional when deriving `Diagnostic`.