| Crates.io | oak-vala |
| lib.rs | oak-vala |
| version | 0.0.1 |
| created_at | 2025-10-21 08:17:28.910635+00 |
| updated_at | 2026-01-23 05:21:00.675004+00 |
| description | Vala object-oriented programming language parser with support for GObject-based programming and modern syntax features. |
| homepage | https://github.com/ygg-lang/oaks |
| repository | https://github.com/ygg-lang/oaks |
| max_upload_size | |
| id | 1893424 |
| size | 82,465 |
High-performance incremental Vala parser for the oak ecosystem with flexible configuration, optimized for GObject-based application development and GNOME ecosystem integration.
Oak Vala is a robust parser for the Vala programming language, designed to handle complete Vala syntax including modern object-oriented features and GTK bindings. Built on the solid foundation of oak-core, it provides both high-level convenience and detailed AST generation for Vala analysis and tooling.
Basic example:
use oak_vala::{ValaLanguage, ValaParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let language = ValaLanguage::default();
let parser = ValaParser::new(&language);
let mut session = ParseSession::<ValaLanguage>::default();
let source = SourceText::new(r#"
public class HelloWorld : Object {
public static int main(string[] args) {
stdout.printf("Hello, World!\n");
return 0;
}
}
"#);
let result = parser.parse(&source, &[], &mut session);
println!("Parsed Vala class successfully.");
Ok(())
}
use oak_vala::{ValaLanguage, ValaParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};
let language = ValaLanguage::default();
let parser = ValaParser::new(&language);
let mut session = ParseSession::<ValaLanguage>::default();
let source = SourceText::new(r#"
public class Calculator : Object {
private double _result;
public double result {
get { return _result; }
set { _result = value; }
}
public Calculator() {
_result = 0.0;
}
public double add(double value) {
_result += value;
return _result;
}
public signal void changed(double new_value);
}
"#);
let result = parser.parse(&source, &[], &mut session);
println!("Parsed Vala class successfully.");
use oak_vala::{ValaLanguage, ValaParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};
let language = ValaLanguage::default();
let parser = ValaParser::new(&language);
let mut session = ParseSession::<ValaLanguage>::default();
let source = SourceText::new(r#"
public interface Drawable {
public abstract void draw(Context ctx);
public virtual void resize(int width, int height) {
// Default implementation
}
}
"#);
let result = parser.parse(&source, &[], &mut session);
println!("Parsed Vala interface successfully.");
use oak_vala::{ValaLanguage, ValaParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};
let language = ValaLanguage::default();
let parser = ValaParser::new(&language);
let mut session = ParseSession::<ValaLanguage>::default();
let source = SourceText::new("public class Test { public int value; }");
let result = parser.parse(&source, &[], &mut session);
// Token information is available in the parse result
use oak_vala::{ValaLanguage, ValaParser};
use oak_core::{Parser, source::SourceText, parser::session::ParseSession};
let language = ValaLanguage::default();
let parser = ValaParser::new(&language);
let mut session = ParseSession::<ValaLanguage>::default();
let source = SourceText::new(r#"
public class Broken {
public int invalid_method() {
return "not a number"; // Type mismatch
}
public int missing_semicolon // Missing semicolon
public property invalid_prop // Missing type
}
"#);
let result = parser.parse(&source, &[], &mut session);
if let Err(e) = result.result {
println!("Parse error: {:?}", e);
}
The parser generates a comprehensive AST with the following main structures:
Oak-vala integrates seamlessly with:
Check out the examples directory for comprehensive examples:
Contributions are welcome!
Please feel free to submit pull requests at the project repository or open issues.