Skip to content

Парсер

Парсер 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: особенности TS
  • parser/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%)

Где смотреть снапшоты