| Crates.io | oak-rust |
| lib.rs | oak-rust |
| version | 0.0.1 |
| created_at | 2025-10-21 12:32:48.325468+00 |
| updated_at | 2026-01-23 04:45:37.635941+00 |
| description | High-performance incremental Rust parser for the oak ecosystem with flexible configuration, emphasizing memory safety and zero-cost abstractions. |
| homepage | https://github.com/ygg-lang/oaks |
| repository | https://github.com/ygg-lang/oaks |
| max_upload_size | |
| id | 1893742 |
| size | 806,704 |
基于 Oak 框架构建的高性能增量 Rust 解析器,提供完整的 Rust 语法分析、代码格式化和语法高亮功能。
Oak Rust 是一个专为 Rust 语言设计的强大解析器,支持完整的 Rust 语法,包括现代语言特性。基于 oak-core 的坚实基础,它提供了高级便利性和详细的 AST 生成功能,适用于静态分析、代码生成、格式化和语法高亮。
use oak_rust::{RustLanguage, RustParser};
use oak_core::language::Language;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let language = RustLanguage::new();
let parser = RustParser::new();
let source = r#"
fn main() {
let x = 42;
println!("Hello, Rust! x = {}", x);
}
"#;
let result = language.parse(source);
match result {
Ok(ast) => println!("解析成功: {:?}", ast),
Err(errors) => println!("解析错误: {:?}", errors),
}
Ok(())
}
use oak_rust::RustHighlighter;
use oak_highlight::highlighter::Highlighter;
fn main() {
let highlighter = RustHighlighter::new();
let code = r#"
fn fibonacci(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
"#;
let highlights = highlighter.highlight(code);
for (start, end, kind) in highlights {
println!("高亮范围: {}..{}, 类型: {:?}", start, end, kind);
}
}
use oak_rust::RustFormatter;
fn main() {
let formatter = RustFormatter::new();
let unformatted_code = "fn main(){let x=42;println!(\"x={}\",x);}";
let formatted = formatter.format(unformatted_code);
println!("格式化后的代码:\n{}", formatted);
}
use oak_rust::{RustLanguage, RustParser};
let language = RustLanguage::new();
let source = r#"
fn add(a: i32, b: i32) -> i32 {
a + b
}
"#;
let result = language.parse(source);
println!("Rust 函数解析成功");
use oak_rust::{RustLanguage, RustParser};
let language = RustLanguage::new();
let source = r#"
#[derive(Debug, Clone)]
struct Point {
x: f64,
y: f64,
}
impl Point {
fn new(x: f64, y: f64) -> Self {
Point { x, y }
}
fn distance(&self, other: &Point) -> f64 {
((self.x - other.x).powi(2) + (self.y - other.y).powi(2)).sqrt()
}
}
"#;
let result = language.parse(source);
println!("Rust 结构体解析成功");
use oak_rust::{RustLanguage, RustParser};
let language = RustLanguage::new();
let source = r#"
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn process_message(msg: Message) {
match msg {
Message::Quit => println!("退出"),
Message::Move { x, y } => println!("移动到 ({}, {})", x, y),
Message::Write(text) => println!("写入: {}", text),
Message::ChangeColor(r, g, b) => println!("颜色: ({}, {}, {})", r, g, b),
}
}
"#;
let result = language.parse(source);
println!("Rust 枚举和模式匹配解析成功");
use oak_rust::RustLexer;
let lexer = RustLexer::new();
let source = "let x = 42; // 这是一个注释";
let tokens = lexer.tokenize(source);
for token in tokens {
println!("Token: {:?}", token);
}
use oak_rust::{RustLanguage, RustParser};
let language = RustLanguage::new();
let source = r#"
fn main() {
println!("Hello, Rust!")
// 缺少闭合大括号
"#;
let result = language.parse(source);
if let Err(errors) = result {
for error in errors {
println!("解析错误: {:?}", error);
}
}
use oak_rust::RustFormatter;
let formatter = RustFormatter::new()
.with_indent_size(2)
.with_max_line_length(100)
.with_tabs(false);
let code = "fn main(){let x=42;}";
let formatted = formatter.format(code);
println!("自定义格式化结果:\n{}", formatted);
解析器生成全面的 AST,包含以下主要结构:
indent_size: 缩进大小use_tabs: 是否使用制表符max_line_length: 最大行长度Oak Rust 可以无缝集成到以下场景:
ast] - 抽象语法树定义,包含所有 Rust 语法结构RustLanguage] - Rust 语言定义和配置RustLexer] - Rust 词法分析器RustParser] - Rust 语法分析器RustBuilder] - AST 构建器,将解析树转换为 ASTRustFormatter] - Rust 代码格式化器RustHighlighter] - Rust 语法高亮器查看 examples 目录获取全面的示例:
欢迎贡献!
请随时在 项目仓库 提交 pull request 或提出 issues。
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。