use std::str::FromStr;
use proc_macro2::{LexError, TokenStream, TokenTree};
pub(super) fn syntax_depth(text: &str) -> Result<u32, LexError> {
let mut deepest = 0;
let mut pending = vec![(TokenStream::from_str(text)?, 0)];
while let Some((stream, depth)) = pending.pop() {
deepest = deepest.max(depth);
pending.extend(nested_groups(stream, depth));
}
Ok(deepest)
}
fn nested_groups(stream: TokenStream, depth: u32) -> Vec<(TokenStream, u32)> {
stream
.into_iter()
.filter_map(|tree| match tree {
TokenTree::Group(group) => Some((group.stream(), depth.saturating_add(1))),
_ => None,
})
.collect()
}