add simple ast dimension diagnostic

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-25 01:41:31 +00:00
parent 2100618d47
commit 8bb69eb81d
3 changed files with 35 additions and 0 deletions

28
src/macros/debug.rs Normal file
View file

@ -0,0 +1,28 @@
use std::cmp;
use proc_macro::TokenStream;
use syn::{parse_macro_input, AttributeArgs, Item};
pub(super) fn recursion_depth(args: TokenStream, item_: TokenStream) -> TokenStream {
let item = item_.clone();
let item = parse_macro_input!(item as Item);
let _args = parse_macro_input!(args as AttributeArgs);
let mut best: usize = 0;
let mut count: usize = 0;
// think you'd find a fancy recursive ast visitor? think again
let tree = format!("{item:#?}");
for line in tree.lines() {
let trim = line.trim_start_matches(' ');
let diff = line.len().saturating_sub(trim.len());
let level = diff / 4;
best = cmp::max(level, best);
count = count.saturating_add(1);
}
println!("--- Recursion Diagnostic ---");
println!("DEPTH: {best}");
println!("LENGTH: {count}");
item_
}