mirror of
https://github.com/oxc-project/oxc.git
synced 2026-11-04 10:29:58 +00:00
### 💥 BREAKING CHANGES -cf8296fecmascript: [**BREAKING**] Fold surrogate strings with JSStr constants (#27098) (Dunqing) ### 🚀 Features -dd6cb2bminifier: Fold out-of-bounds string indices to `void 0` (#28004) (Dunqing) ### 🐛 Bug Fixes -f4dac9esemantic: Separate hoisted vars from block type bindings (#27936) (limadog9) - 9ec6617 minifier: Keep brackets on negative and non-finite numeric keys (#27855) (Yunus Ozen) -520a26eminifier: Keep the default in shorthand assignment targets (#28183) (waltu) -def47b8react-compiler: Keep manual memoization as written when its dependencies can't be honoured (#28101) (Dunqing) -704d8cftransformer_plugins: Keep the bare inject when references to it remain (#26965) (Bharadwaj Pendyala) -6d7b372minifier: Handle sequence exprs when folding if to expr statement (#27939) (Armano) -e3eca41runtime: Align async iterator throw with Babel (#28059) (camc314) -af0258dparser: Parse source imports named type (#28062) (camc314) -83633a7parser: Parse escaped class field names after initializers (#28061) (camc314) -90c58acparser: Parse postfix updates of sloppy `let` identifiers (#28060) (camc314) -0e2934fcodegen: Preserve default import names in source maps (#28058) (camc314) -09bdb80minifier: Allow argument rewrite with with leading var assignments (#28056) (Armano) -ebcdcd9minifier: Preserve rest destructuring side effects (#27981) (camc314) -5c84098semantic,linter: Report names with lone surrogates in enum and lint checks (#27991) (Dunqing) -bd70a9becmascript: Use ECMAScript whitespace when folding `parseFloat`/`parseInt`/`trim` (#27719) (Dunqing) -4c0fa90minifier,linter: Keep `delete` of constant members and later JSX keys (#27990) (Dunqing) ### ⚡ Performance -3493ce3minifier: Reuse is_error_constructor and simplify substitute_global_new_expression (#28149) (Armano) -a22c9f2parser: Move annotation comment handling out of hot paths (#28139) (camc314) -1ed93afdata_structures: Copy short strings without a memcpy call (#27953) (leaysgur) ### 🛡️ Security -b93e169deps: Bump .node-version to 26.12.1 (#28090) (leaysgur) Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
Oxc Codegen
High-performance code generation from AST back to JavaScript/TypeScript source code.
Overview
This crate converts AST nodes back into source code strings, supporting JavaScript, TypeScript, and JSX. It's designed for speed and correctness, producing clean, readable output.
Key Features
- Fast code generation: Optimized for performance with minimal allocations
- Source map support: Generate accurate source maps during output
- Configurable formatting: Control whitespace, semicolons, and other formatting options
- Comment preservation: Maintain comments during code generation
- Binary expression optimization: Intelligent parentheses insertion
Architecture
Code Generation Pipeline
- AST Traversal: Walk through AST nodes systematically
- Token Generation: Convert nodes to appropriate tokens/strings
- Formatting: Apply whitespace, indentation, and style rules
- Source Mapping: Track original source positions if enabled
Design Principles
- Correctness: Generated code must be functionally equivalent to original
- Performance: Minimize string allocations and copying
- Readability: Produce clean, well-formatted output
- Fidelity: Preserve semantic meaning and behavior
The codegen is adapted from esbuild's approach, optimized for Rust and oxc's AST structure.