use super::codegen::{Codegen, CodegenConfig};
use super::ir::lower;
use super::parser::Parser;
use super::semantic::analyze;
use super::syntax::SyntaxNode;
use proc_macro2::TokenStream;
use quote::quote;
pub fn compile_template(template: &str, output_var: &str) -> syn::Result<TokenStream> {
if template.trim().is_empty() {
return Ok(quote! {});
}
let parser = Parser::new(template);
let green = parser.parse();
let root = SyntaxNode::new_root(green);
let analysis = analyze(&root);
let ir = lower(&root, analysis);
let config = CodegenConfig {
output_var: output_var.to_string(),
};
let code = Codegen::with_config(config).generate(&ir);
Ok(code)
}