macroforge_ts_quote 0.1.82

Quote macro for generating TypeScript code at compile time
Documentation
use super::error::GenResult;
use super::*;

impl Codegen {
    pub(super) fn generate_assign_target(&self, node: &IrNode) -> GenResult<TokenStream> {
        match node {
            IrNode::Ident { value: name, .. } => Ok(quote! {
                macroforge_ts::swc_core::ecma::ast::AssignTarget::Simple(
                    macroforge_ts::swc_core::ecma::ast::SimpleAssignTarget::Ident(
                        macroforge_ts::swc_core::ecma::ast::BindingIdent {
                            id: macroforge_ts::swc_core::ecma::ast::Ident::new_no_ctxt(
                                #name.into(),
                                macroforge_ts::swc_core::common::DUMMY_SP,
                            ),
                            type_ann: None,
                        }
                    )
                )
            }),
            IrNode::MemberExpr {
                obj,
                prop,
                computed,
                ..
            } => {
                let obj_code = self.generate_expr(obj)?;
                let prop_code = if *computed {
                    let p = self.generate_expr(prop)?;
                    quote! {
                        macroforge_ts::swc_core::ecma::ast::MemberProp::Computed(
                            macroforge_ts::swc_core::ecma::ast::ComputedPropName {
                                span: macroforge_ts::swc_core::common::DUMMY_SP,
                                expr: Box::new(#p),
                            }
                        )
                    }
                } else {
                    let ident_code = self.generate_ident_name(prop)?;
                    quote! {
                        macroforge_ts::swc_core::ecma::ast::MemberProp::Ident(#ident_code)
                    }
                };

                Ok(quote! {
                    macroforge_ts::swc_core::ecma::ast::AssignTarget::Simple(
                        macroforge_ts::swc_core::ecma::ast::SimpleAssignTarget::Member(
                            macroforge_ts::swc_core::ecma::ast::MemberExpr {
                                span: macroforge_ts::swc_core::common::DUMMY_SP,
                                obj: Box::new(#obj_code),
                                prop: #prop_code,
                            }
                        )
                    )
                })
            }
            _ => Ok(quote! {
                macroforge_ts::swc_core::ecma::ast::AssignTarget::Simple(
                    macroforge_ts::swc_core::ecma::ast::SimpleAssignTarget::Invalid(
                        macroforge_ts::swc_core::ecma::ast::Invalid {
                            span: macroforge_ts::swc_core::common::DUMMY_SP,
                        }
                    )
                )
            }),
        }
    }
}