Expand description
ยง๐ ๏ธ oak-elixir Developer Guide
Welcome to the internal implementation of the Elixir parser. This module provides the core logic for tokenizing and parsing Elixir source code into a high-fidelity syntax tree.
ยง๐ฆ Core Components
- Lexer: Tokenizes Elixir source code, handling sigils, atoms, and strings with full fidelity.
- Parser: Implements the Elixir grammar, producing a Green Tree that represents the concrete syntax.
- AST: Provides a type-safe Red Tree facade for easy traversal and analysis.
- Language: Defines the
ElixirLanguageconfiguration and integration with the Oak framework.
ยง๐ Usage Example
ยงBasic Parsing
use oak_elixir::{ElixirParser, SourceText, ElixirLanguage};
fn parse_elixir_code(code: &str) {
let source = SourceText::new(code);
let config = ElixirLanguage::new();
let parser = ElixirParser::new(&config);
let result = parser.parse(&source);
if result.is_success() {
let root = result.root();
println!("AST Root: {:?}", root);
}
}ยงIncremental Parsing
use oak_elixir::{ElixirParser, SourceText, ElixirLanguage};
fn incremental_update(old_code: &str, new_code: &str) {
let config = ElixirLanguage::new();
let mut parser = ElixirParser::new(&config);
// Initial parse
let initial_source = SourceText::new(old_code);
let _ = parser.parse(&initial_source);
// Incremental update
let updated_source = SourceText::new(new_code);
let result = parser.parse(&updated_source);
if result.is_success() {
println!("Incremental parse completed successfully.");
}
}ยง๐ Diagnostics
The parser provides detailed diagnostics for syntax errors, including error ranges and helpful messages.
let result = parser.parse(&source);
for diagnostic in result.diagnostics() {
println!("Error at {:?}: {}", diagnostic.range(), diagnostic.message());
}Elixir support for the Oak language framework.
Re-exportsยง
pub use crate::ast::ElixirRoot;pub use crate::builder::ElixirBuilder;pub use crate::parser::element_type::ElixirElementType;
Modulesยง
Structsยง
Enumsยง
- Elixir
Token Type - Token types for Elixir.