Skip to content
Snippets Groups Projects
debug.rs 792 B
Newer Older
  • Learn to ignore specific revisions
  • 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_
    }