proc-macro2-diagnostics   ![crates.io] ![docs.rs]

Diagnostics for stable and nightly proc-macros!

Usage

  1. Depend on the library in your proc-macro.

toml [dependencies] proc_macro2_diagnostics = "0.9"

  1. Import SpanDiagnosticExt and use its methods on a proc_macro2::Span to create Diagnostics:

```rust use syn::spanned::Spanned; use procmacro2::TokenStream; use procmacro2_diagnostics::{SpanDiagnosticExt, Diagnostic};

fn my_macro(input: TokenStream) -> Result { Err(input.span().error("there's a problem here...")) } ```

  1. If there's an error, emit the diagnostic as tokens:

```rust extern crate proc_macro;

pub fn realmacro(tokens: procmacro::TokenStream) -> procmacro::TokenStream { match mymacro(tokens.into()) { Ok(tokens) => tokens.into(), Err(diag) => diag.emitasexpr_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:

toml [dependencies] proc_macro2_diagnostics = { version = "0.9", default-features = false }

The compiler always colors diagnostics on nightly.

License

Licensed under either of the following, at your option: