Skip to content

Parser

Oxc Parser 的目标是成为最快、也最符合规范的 JavaScript/TypeScript 解析器。 参与 Parser 工作需要同时熟悉实现细节与庞大的测试基建。

架构概览

解析器沿用经典前端流水:

源代码 → Lexer → Token → Parser → AST

核心组件

  • Lexer:将源码切分为 Token
  • Parser:递归下降构建 AST
  • AST:内存亲和的语法树结构
  • 错误恢复:错误处理与容错
  • 语义分析:符号解析与作用域

目标

我们希望成为可用于生产环境的、最快的 Rust Parser:

  • 速度:相较 SWC 约 3 倍速,相较 Biome 约 5 倍速
  • 一致性:Test262 100% 对齐,Babel/TypeScript ≥99% 兼容
  • 内存:Arena 分配、堆用量低
  • 错误信息:可恢复并且有意义的诊断

开发流程

环境与命令

bash
# Parser 单元测试
cargo test -p oxc_parser

# Conformance(覆盖率)测试
just c  # 或 `just coverage`

目录结构示意

crates/oxc_parser/
├── src/
│   ├── lib.rs              # 对外 API
│   ├── lexer/
│   ├── parser/
│   ├── cursor.rs
│   └── diagnostics.rs
├── tests/
└── examples/

核心文件

  • parser/mod.rs:入口
  • parser/statement.rs:语句
  • parser/expression.rs:表达式
  • parser/typescript.rs:TS 专属
  • parser/jsx.rs:JSX

Conformance 测试

bash
just c

tasks/coverage 中驱动各类一致性套件:

Test262(ECMAScript)

Test262 覆盖规范可观察行为; 解析层面使用其中的 解析阶段否定用例说明

当前43765/43765 (100.00%)

Babel Parser 测试

新语言特性往往首先在 Babel 落地,其 parser tests 覆盖前沿语法。

当前2093/2101 (99.62%)

TypeScript Conformance

TS conformance

当前6470/6479 (99.86%)

结果快照

快照文件用于跟踪变化: