Парсер
Парсер Oxc рассчитан на максимальную скорость и соответствие спецификации JavaScript и TypeScript. Контрибуция требует понимания реализации и инфраструктуры тестов.
Архитектура
Классическая схема фронтенда компилятора:
Исходный текст → Лексер → Токены → Парсер → ASTОсновные части
- Лексер: разбивает текст на токены
- Парсер: рекурсивный спуск, строит AST
- AST: компактное дерево синтаксиса
- Восстановление после ошибок: сообщения и продолжение разбора
- Семантика: символы и области видимости
Цели
Быстрый промышленный парсер на Rust:
- Скорость: порядка 3× быстрее SWC, 5× быстрее Biome
- Соответствие: Test262 100%, Babel/TS ~99%+
- Память: арены, минимум лишних аллокаций
- Ошибки: понятные сообщения и восстановление
Рабочий процесс
Подготовка
bash
cargo test -p oxc_parser
# Конформанс-тесты
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: особенности TSparser/jsx.rs: JSX
Конформанс-тесты
bash
just cЗапуск через раннер в tasks/coverage:
Test262
Официальный набор ECMAScript Test Suite (Test262).
Для парсера используются parse phase tests.
Статус: 43765/43765 (100.00%)
Тесты парсера Babel
Новые фичи JS часто появляются в Babel первыми — см. тесты парсера.
Статус: 2093/2101 (99.62%)
TypeScript
Конформанс TS: tests/cases/conformance.
Статус: 6470/6479 (99.86%)