55 个版本 (25 个重大更改)

0.25.0 2024年8月23日
0.23.1 2024年8月6日
0.22.1 2024年7月28日
0.11.0 2024年3月30日
0.0.1 2023年3月30日

#17 in 编程语言

Download history 1302/week @ 2024-05-03 1296/week @ 2024-05-10 3752/week @ 2024-05-17 2405/week @ 2024-05-24 55963/week @ 2024-05-31 66360/week @ 2024-06-07 50788/week @ 2024-06-14 84403/week @ 2024-06-21 78238/week @ 2024-06-28 60966/week @ 2024-07-05 62650/week @ 2024-07-12 59341/week @ 2024-07-19 68756/week @ 2024-07-26 62360/week @ 2024-08-02 49078/week @ 2024-08-09 39362/week @ 2024-08-16

232,457 每月下载量
14 个crate中使用 (11 个直接使用)

MIT 许可证

2.5MB
51K SLoC

JavaScript和TypeScript的Oxc解析器

性能

使用了以下优化技术:

  • AST在内存竞技场(bumpalo)中分配,以实现快速的AST删除
  • oxc_span::Span 偏移使用 u32 而不是 usize
  • 作用域绑定、符号解析和复杂的语法错误不在解析器中执行,而是委托给 语义分析器

用法

解析器具有最小的API,具有三个输入和一个返回结构([ParserReturn])。

let parser_return = Parser::new(&allocator, &source_text, source_type).parse();

示例

https://github.com/Boshen/oxc/blob/main/crates/oxc_parser/examples/parser.rs

访问者

参见 oxc_ast::Visitoxc_ast::VisitMut

无访问者访问

对于临时任务,可以使用语义分析器获取指向未类型化节点的父指针树,节点可以通过顺序循环进行迭代。

for node in semantic.nodes().iter() {
    match node.kind() {
        // check node
    }
}

参见 完整的linter示例

依赖关系

~4–10MB
~91K SLoC