Expand description
§macroforge_ts_syn
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.
§Overview
The crate is organized into several modules:
abi- Application Binary Interface types for stable macro communication- [
derive] - Derive input types that mirror Rust’ssyn::DeriveInput errors- 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 tosyn::parse::ParseBuffer
§Architecture
The 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) │
└─────────────────────────────────────────────────────────────┘§Usage Example
Here’s how to use this crate in a derive macro:
ⓘ
use macroforge_ts_syn::{parse_ts_macro_input, DeriveInput, MacroResult, Patch, Data, MacroContextIR};
// This function signature shows a typical derive macro entry point
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()
}§Helper Macros
This crate provides several helper macros for working with SWC AST nodes:
- [
ident!] - Create an identifier with optional formatting - [
private_ident!] - Create a private (marked) identifier stmt_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 assignment
§Feature Flags
swc- Enables SWC integration and the helper macros (enabled by default)
§Re-exports
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 generation
Re-exports§
pub use import_registry::ImportRegistry;pub use import_registry::clear_registry;pub use import_registry::install_registry;pub use import_registry::take_registry;pub use import_registry::with_registry;pub use import_registry::with_registry_mut;pub use swc_core;pub use abi::*;pub use derive::*;pub use errors::*;pub use lower::*;pub use stream::*;
Modules§
- __
internal - Internal module for virtual completion helpers.
- abi
- Application Binary Interface (ABI) types for stable macro communication.
- config
- Macroforge Configuration Types
- derive
syn-like derive input types for TypeScript macros.- errors
- Error types for the macro system.
- import_
registry - Import Registry
- lower
- AST lowering from SWC types to IR representations.
- parse
- Low-level TypeScript parsing utilities.
- quote
- quote_
helpers - Helper macros for ergonomic code generation.
- stream
- A
syn-like parsing API for TypeScript using SWC. - swc_
common - swc_
ecma_ ast
Macros§
- assign_
stmt - Creates an assignment expression statement (
lhs = rhs;). - fn_
assign - Creates a function assignment statement (
obj.prop = function(params) { body };). - fn_expr
- Creates an anonymous function expression with the given body statements.
- member_
expr - Creates a member access expression (
obj.prop). - parse_
ts_ macro_ input - Parse a
TsStreaminto aDeriveInput, returning early with an errorMacroResulton failure. - proto_
method - Creates a method assignment on a class prototype.
- quote
- Supported output types
- stmt_
block - Creates a block statement (
{ ... }) from a vector of statements. - stmt_
block_ from_ vec - Converts a
Vec<Stmt>into a single block statement for use ints_quote!. - stmt_
vec - Wraps a
Vec<Stmt>in aStmtVecfor use withts_quote!. - ts_
ident - Creates an SWC
Identwith a dummy span. - ts_
private_ ident - Creates a private (marked) SWC
Ident.
Structs§
- StmtVec
- A wrapper type for passing a
Vec<Stmt>to be used inline in function bodies. - TsExpr
- Wrapper for
swc_core::ecma::ast::Exprthat implements [Display] andToTsString. - TsIdent
- Wrapper for
swc_core::ecma::ast::Identthat implements [Display]. - TsStmt
- Wrapper for
swc_core::ecma::ast::Stmtthat implements [Display]. - TsType
Wrapper - Wrapper for
swc_core::ecma::ast::TsTypethat implements [Display].
Traits§
- ToTs
Expr - Converts common Rust values into SWC
Exprnodes. - ToTs
Ident - Converts common Rust values into SWC
Identnodes. - ToTs
Stmt - Converts common Rust values into SWC
Stmtnodes. - ToTs
String - Trait for converting values to TypeScript string representations.
- ToTs
Type - Converts common Rust values into SWC
TsTypenodes. - ToTs
Type Name - Trait for converting values to type name strings.
Functions§
- emit_
expr - Emits an expression to a string representation.
- emit_
module_ items - Emits a list of module items to a TypeScript source string.
- emit_
stmt - Emits a statement to a string representation.
- emit_
ts_ type - Emits a TypeScript type to a string representation.
- expr_
to_ string - Converts an expression to its TypeScript string representation.
- extend_
module_ item_ body - Extends the body of a function or class with additional statements.
- ident_
to_ string - Converts an identifier to its TypeScript string representation.
- parse_
ts_ to_ module_ items - Parses a TypeScript string into a Vec of ModuleItems.
- stmt_
to_ string - Converts a statement to its TypeScript string representation.
- to_
ts_ expr - Convert a value into a TypeScript
Expr. - to_
ts_ ident - Convert a value into a TypeScript
Ident. - to_
ts_ stmt - Convert a value into a TypeScript
Stmt. - to_
ts_ type - Convert a value into a TypeScript
TsType. - type_
to_ string - Converts a type to its TypeScript string representation.