| Crates.io | macroforge_ts_syn |
| lib.rs | macroforge_ts_syn |
| version | 0.1.72 |
| created_at | 2025-12-07 21:42:50.446405+00 |
| updated_at | 2026-01-05 06:15:18.465987+00 |
| description | TypeScript syntax types for compile-time macro code generation |
| homepage | https://github.com/macroforge-ts/syn |
| repository | https://github.com/macroforge-ts/syn |
| max_upload_size | |
| id | 1972289 |
| size | 362,771 |
TypeScript syntax types for compile-time macro code generation
TypeScript syntax types for compile-time macro code generation.
This crate provides a syn-like API for parsing and manipulating
TypeScript code, enabling macro authors to work with TypeScript AST in a familiar way.
It is the core infrastructure crate for the Macroforge TypeScript macro system.
The crate is organized into several modules:
abi] - Application Binary Interface types for stable macro communicationderive] - Derive input types that mirror Rust's syn::DeriveInputerrors] - Error types and diagnostics for macro expansionlower] - AST lowering from SWC types to IR representationsparse] - TypeScript parsing utilities wrapping SWCquote_helpers] - Macros for ergonomic code generationstream] - Parsing stream abstraction similar to syn::parse::ParseBufferThe crate follows a layered architecture:
┌─────────────────────────────────────────────────────────────┐
│ User-Facing API │
│ (DeriveInput, TsStream, parse_ts_macro_input!) │
├─────────────────────────────────────────────────────────────┤
│ Lowering Layer │
│ (lower_classes, lower_interfaces, lower_enums, ...) │
├─────────────────────────────────────────────────────────────┤
│ IR Types (ABI Stable) │
│ (ClassIR, InterfaceIR, EnumIR, TypeAliasIR, ...) │
├─────────────────────────────────────────────────────────────┤
│ SWC Parser │
│ (swc_core for TypeScript/JavaScript parsing) │
└─────────────────────────────────────────────────────────────┘
Here's how to use this crate in a derive macro:
use macroforge_ts_syn::{parse_ts_macro_input, DeriveInput, MacroResult, Patch};
pub fn my_derive_macro(ctx: MacroContextIR) -> MacroResult {
// Parse the input using the syn-like API
let input = parse_ts_macro_input!(ctx);
// Access type information
println!("Processing type: {}", input.name());
// Match on the type kind
match &input.data {
Data::Class(class) => {
for field in class.fields() {
println!("Field: {}", field.name);
}
}
Data::Interface(iface) => {
// Handle interface...
}
Data::Enum(enum_) => {
// Handle enum...
}
Data::TypeAlias(alias) => {
// Handle type alias...
}
}
// Generate code and return patches
MacroResult::ok()
}
This crate provides several helper macros for working with SWC AST nodes:
ident!] - Create an identifier with optional formattingprivate_ident!] - Create a private (marked) identifierstmt_block!] - Create a block statement from statementsfn_expr!] - Create an anonymous function expressionmember_expr!] - Create a member access expression (obj.prop)assign_stmt!] - Create an assignment statementfn_assign!] - Create a function assignment (obj.prop = function() {...})proto_method!] - Create a prototype method assignmentswc - Enables SWC integration and the helper macros (enabled by default)For convenience, the crate re-exports commonly used SWC types when the swc feature
is enabled:
swc_core] - The full SWC core crateswc_common] - Common SWC types (Span, SourceMap, etc.)swc_ecma_ast] - ECMAScript/TypeScript AST typesquote! - SWC's quote macro for AST generationAdd this to your Cargo.toml:
[dependencies]
macroforge_ts_syn = "0.1.38"
StmtVec - A wrapper type for passing a Vec<Stmt> to be used inline in function bodies.See the full API documentation on the Macroforge website.
MIT