Parser
O parser do Oxc foi feito para ser o mais rápido e o mais aderente à especificação entre parsers JavaScript e TypeScript. Contribuir com o parser exige entender tanto os detalhes de implementação quanto a infraestrutura extensa de testes.
Visão geral da arquitetura
O parser segue o modelo clássico de frontend de compilador:
Source Text → Lexer → Tokens → Parser → ASTComponentes principais
- Lexer: transforma o texto-fonte em tokens estruturados
- Parser: parser recursivo descendente que monta a AST
- AST: árvore sintática abstrata eficiente em memória
- Recuperação de erros: tratamento avançado de erros e recuperação
- Análise semântica: resolução de símbolos e gestão de escopo
Metas de desenho
Queremos ser o parser em Rust mais rápido e pronto para produção, com:
- Velocidade: ~3x mais rápido que SWC, ~5x que Biome
- Conformidade: 100% Test262, 99%+ compatível com Babel/TypeScript
- Memória: alocação em arena, pouco uso de heap
- Qualidade dos erros: mensagens úteis com recuperação
Fluxo de desenvolvimento
Configuração
# Run parser tests
cargo test -p oxc_parser
# Run conformance tests
just c # or `just coverage`Estrutura do projeto
crates/oxc_parser/
├── src/
│ ├── lib.rs # Public API
│ ├── lexer/ # Tokenization
│ ├── parser/ # Parsing logic
│ ├── cursor.rs # Token stream management
│ └── diagnostics.rs # Error handling
├── tests/ # Unit tests
└── examples/ # Usage examplesArquivos centrais do parser
parser/mod.rs: entrada principal do parserparser/statement.rs: parsing de statementsparser/expression.rs: parsing de expressõesparser/typescript.rs: parsing específico de TypeScriptparser/jsx.rs: parsing de JSX
Testes de conformidade
Rodar testes de conformidade
just cIsso executa as suítes de conformidade com o runner em tasks/coverage:
Test262 — conformidade ECMAScript
JavaScript tem a suíte de testes ECMAScript, o Test262. O objetivo é cobrir todo comportamento observável da especificação.
A conformidade do parser usa os testes da fase parse.
Estado atual: 43765/43765 (100.00%)
Testes do parser Babel
Quando surgem recursos novos na linguagem, o Babel costuma implementar primeiro. O Babel tem testes de parser abrangentes para o que há de mais novo.
Estado atual: 2093/2101 (99.62%)
Conformidade TypeScript
Os testes de conformidade do TypeScript estão aqui.
Estado atual: 6470/6479 (99.86%)
Ver resultados
Os resultados ficam em snapshots para acompanhar mudanças: