# Vacro Report
**Better Panic Reporting for Procedural Macros**
[](https://crates.io/crates/vacro-report)
[](https://docs.rs/vacro-report)
## Introduction
`vacro-report` is a diagnostic enhancement tool designed to improve the debugging experience for Rust Procedural Macros.
It currently focuses on solving the opaque panic messages generated by `syn::parse_quote!` or `parse_quote_spanned`. When `parse_quote!` or `parse_quote_spanned` fails, it usually just says "failed to parse". `vacro-report` intercepts these calls and prints the actual generated token stream formatted as code, highlighting the syntax error.
## Installation
```toml
[dependencies]
vacro-report = "0.1.2"
```
## Usage
Simply decorate your function with `#[vacro_report::scope]`.
Inside the scope, any usage of `parse_quote!` and `parse_quote_spanned` will be automatically instrumented. No other code changes are required.
```rust
use syn::{parse_quote, Expr, Token};
use vacro_report::scope;
#[scope]
fn generate_code() {
// If this fails, vacro-report will print the exact tokens that caused the error.
let _expr: Expr = parse_quote! {
1 + 2 + // Missing operand, would normally panic silently or vaguely
};
}
```
## Features
- **Automatic Interception**: Rewrites `parse_quote!` and `parse_quote_spanned!` calls within the `#[scope]` function.
- **Detailed Diagnostics**: When a parsing error occurs, it displays the generated code (formatted) and the error location.
- **Zero Overhead (Success)**: Adds minimal overhead only when an error actually occurs (panic path).
> ⚠️ Warning
>
> We use `debug_assertions` to make this judgment, which means that if you have enabled certain optimizations, the effect may not trigger.