Skip to content
Snippets Groups Projects
Commit 8bb69eb8 authored by Jason Volk's avatar Jason Volk
Browse files

add simple ast dimension diagnostic


Signed-off-by: default avatarJason Volk <jason@zemos.net>
parent 2100618d
No related branches found
No related tags found
1 merge request!530de-global services
use std::{any::Any, panic};
/// Export debug proc_macros
pub use conduit_macros::recursion_depth;
/// Export all of the ancillary tools from here as well.
pub use crate::utils::debug::*;
......
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_
}
mod admin;
mod cargo;
mod debug;
mod rustc;
mod utils;
......@@ -13,5 +14,8 @@ pub fn admin_command_dispatch(args: TokenStream, input: TokenStream) -> TokenStr
#[proc_macro_attribute]
pub fn cargo_manifest(args: TokenStream, input: TokenStream) -> TokenStream { cargo::manifest(args, input) }
#[proc_macro_attribute]
pub fn recursion_depth(args: TokenStream, input: TokenStream) -> TokenStream { debug::recursion_depth(args, input) }
#[proc_macro]
pub fn rustc_flags_capture(args: TokenStream) -> TokenStream { rustc::flags_capture(args) }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment