borrowscope-macro 0.1.1

Procedural macros for BorrowScope ownership tracking
Documentation
//! Code formatting utilities

#![allow(dead_code)]

use proc_macro2::TokenStream;
use quote::quote;

/// Add comments to generated code
pub fn add_tracking_comment(code: TokenStream) -> TokenStream {
    quote! {
        // Generated by BorrowScope
        #code
    }
}

/// Generate with proper indentation
pub fn generate_indented_block(stmts: &[syn::Stmt]) -> TokenStream {
    quote! {
        {
            #(#stmts)*
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use syn::parse_quote;

    #[test]
    fn test_add_tracking_comment() {
        let code: TokenStream = quote! { let x = 5; };
        let result = add_tracking_comment(code);
        let result_str = result.to_string();

        // Comments are preserved in the TokenStream structure
        // but may not appear in to_string() output
        assert!(result_str.contains("let x = 5"));
    }

    #[test]
    fn test_generate_indented_block() {
        let stmts: Vec<syn::Stmt> = vec![parse_quote! { let x = 5; }, parse_quote! { let y = 10; }];

        let code = generate_indented_block(&stmts);
        let result = code.to_string();

        assert!(result.contains('{'));
        assert!(result.contains('}'));
        assert!(result.contains("let x"));
        assert!(result.contains("let y"));
    }

    #[test]
    fn test_generate_indented_block_empty() {
        let stmts: Vec<syn::Stmt> = vec![];
        let code = generate_indented_block(&stmts);
        let result = code.to_string();

        assert!(result.contains('{'));
        assert!(result.contains('}'));
    }

    #[test]
    fn test_generate_indented_block_single() {
        let stmts: Vec<syn::Stmt> = vec![parse_quote! { let x = 5; }];
        let code = generate_indented_block(&stmts);
        let result = code.to_string();

        assert!(result.contains("let x = 5"));
    }
}