mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-30 19:58:30 +00:00
29 lines
792 B
Rust
29 lines
792 B
Rust
|
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_
|
||
|
}
|