It's AST has the same shape as ZIG's AST, full data oriented design style.
```zig
pub const BinaryExpression = struct {
/// Expression
left: NodeIndex,
/// Expression
right: NodeIndex,
operator: BinaryOperator,
};```
Oxc could've went this way bug I decided not to because we need to build tooling on top of the AST, Rust APIs that require to work with this AST shape can be really hard to work with.
e.g to get the name of identifier, from its source code:
```zig
const name = ctx.tree.getString(
id.name);
```
to get the span:
```zig
ctx.tree.getSpan(node_index)
```
Not gonna trade perf at this point.