mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
894c8f9cd8
### 💥 BREAKING CHANGES -a31567aallocator: [**BREAKING**] Make `Allocator::cursor_ptr` and `data_end_ptr` private (#26081) (overlookmotel) ### 🚀 Features -784e9faminifier: Invert `!0` and `!1` in place for boolean context to `1` and `0` (#26050) (Armano) -1e902ccminifier: Expand fold leading assignments into the var decl (#26142) (Armano) -3ed4f6aminifier: Expand de morgan's optimization to allow move of `!` (#25930) (Armano) -5672585parser: Attach all comments to nodes (#25944) (camc314) ### 🐛 Bug Fixes -4adfb4csemantic: Validate chained continue labels (#26157) (camc314) -b874f48ecmascript: `Math.round` only exact half ties (#26150) (camc314) -a625378minifier: Coerce omitted `indexOf` search argument (#26149) (camc314) -dc7398becmascript: Trim trailing whitespace in string to number (#26148) (camc314) -243b685transformer/object-rest: Lower multiple declarators correctly (#26147) (camc314) -dc09a3aparser: Avoid panic on escaped string export names (#26146) (camc314) -e412cf2linter: Clamp invalid JS plugin locations (#26144) (camc314) -c3dedc9semantic: Skip function body bindings in parameters (#26099) (Dunqing) -e74de61transform-react: Match Babel diagnostic reporting (#26128) (Boshen) -d5163d0parser: Correctly classify unapplied pure annotations (#26084) (camc314) -8531b9blinter/plugins: Alter method for obtaining mutable `Program` when sending AST to JS plugins (#26077) (overlookmotel) -9b51658regular_expression: Allow oversized decimal escape for Annex B (#26070) (leaysgur) -c8de4dfregular_expression: Reject oversized backreferences (#26055) (camc314) ### ⚡ Performance -ac4785adiagnostics: Use fixed ANSI styles (#26130) (Boshen) -07a0793packages/codegen: Flatten output in chunks (#26109) (overlookmotel) -487427apackages/codegen: Faster string flattening (#26108) (overlookmotel) -7785583packages/codegen: Ensure indent strings are flattened (#26107) (overlookmotel) -0dd4db3packages/codegen: Store mapping positions in an `Int32Array` (#26085) (overlookmotel)
Oxc AST
Abstract Syntax Tree definitions for JavaScript, TypeScript, and JSX.
Overview
This crate provides comprehensive AST (Abstract Syntax Tree) node definitions that support the full spectrum of JavaScript and TypeScript syntax, including JSX. The AST closely follows ECMAScript specifications while providing ergonomic APIs for manipulation.
Key Features
- Complete language support: JavaScript, TypeScript, JSX, and TSX
- ECMAScript compliant: AST structure follows official specifications
- Memory efficient: Designed to work with
oxc_allocatorfor fast allocation - Visitor patterns: Integrates with
oxc_ast_visitfor traversal - Type-safe: Leverages Rust's type system for correctness
AST Design Principles
The AST design differs from estree in several important ways:
- Explicit identifiers: Uses specific types like
BindingIdentifier,IdentifierReference, andIdentifierNameinstead of genericIdentifier - Precise assignment targets:
AssignmentExpression.leftusesAssignmentTargetinstead of genericPattern - Literal specialization: Replaces generic
LiteralwithBooleanLiteral,NumericLiteral,StringLiteral, etc. - Evaluation order: Field order follows ECMAScript evaluation order for consistency
Architecture
The AST is designed for:
- Parse: Efficient construction during parsing
- Transform: Easy manipulation during transpilation
- Visit: Systematic traversal for analysis
- Codegen: Clean conversion back to source code
All AST nodes are allocated in an arena (oxc_allocator) for optimal performance.