4 releases
0.10.1 | Jul 10, 2023 |
---|---|
0.10.0 | Mar 22, 2023 |
0.9.1 | Nov 1, 2020 |
0.9.0 | Oct 10, 2020 |
#31 in Procedural macros
620,666 downloads per month
Used in 1,257 crates
(25 directly)
25KB
389 lines
proc-macro2-diagnostics
Diagnostics for stable and nightly proc-macros!
Usage
- Depend on the library in your proc-macro.
[dependencies]
proc_macro2_diagnostics = "0.10"
- Import
SpanDiagnosticExt
and use its methods on aproc_macro2::Span
to createDiagnostic
s:
use syn::spanned::Spanned;
use proc_macro2::TokenStream;
use proc_macro2_diagnostics::{SpanDiagnosticExt, Diagnostic};
fn my_macro(input: TokenStream) -> Result<TokenStream, Diagnostic> {
Err(input.span().error("there's a problem here..."))
}
- If there's an error, emit the diagnostic as tokens:
extern crate proc_macro;
pub fn real_macro(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
match my_macro(tokens.into()) {
Ok(tokens) => tokens.into(),
Err(diag) => diag.emit_as_expr_tokens().into()
}
}
This does the right thing on nightly or stable.
Caveats
On stable, due to limitations, any top-level, non-error diagnostics are
emitted as errors. This will abort compilation. To avoid this, you may want
to cfg
-gate emitting non-error diagnostics to nightly.
Colors
By default, error messages are colored on stable. To disable, disable default features:
[dependencies]
proc_macro2_diagnostics = { version = "0.10", default-features = false }
The compiler always colors diagnostics on nightly.
License
Licensed under either of the following, at your option:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
Dependencies
~215–680KB
~16K SLoC