# anal-eyes \* ͜\* Attribute macro to quickly add crude debugging markers to functions.
Inserts a `println!` statement following every variable declaration and semicolon-terminated expression within the function, to assist in debugging when a backtrace is not available or when behavior needs to be assessed at runtime. ## Use 1. Add `anal-eyes` to your project ``` $ cargo add anal_eyes ``` 2. Place the attribute `#[anal_eyes]` above your troublesome function(s) ``` use anal_eyes::anal_eyes; use rand::{ Rng, rngs::ThreadRng }; struct Junk; impl Junk { #[anal_eyes] fn see(&self, no_evil: &mut ThreadRng) -> bool { no_evil.gen_range(0..3) == 3 } #[anal_eyes] fn r#do(&self) -> Self { Junk } #[anal_eyes] fn funky(monkey: Self) -> Self { let mut no_evil = rand::thread_rng(); if monkey.see(&mut no_evil) { monkey.r#do() } else { Self::funky(monkey) } } } #[anal_eyes] fn main() { Junk::funky(Junk); } ``` 3. ??? ``` $ cargo run ``` 4. Profit ``` Executing 'main' Executing 'funky' funky, declaration 1 Executing 'see' Executing 'funky' funky, declaration 1 Executing 'see' Executing 'funky' funky, declaration 1 Executing 'see' { ... } Executing 'funky' funky, declaration 1 Executing 'see' thread 'main' has overflowed its stack fatal runtime error: stack overflow ``` ## Future directions I'm developing this crate primarily for personal use so I'll only be expanding it as the need arises. - [ ] More flexibility with template formatting - [ ] Expression values extracted & reflected in println - [ ] Code line and column - [ ] Tool for auto-cleanup of attributes ## Disclaimer The name is an immature play on the word "analyze", referencing the trait of "anal-retentiveness" in the context of code scrutiny.
Don't ban me!