Skip to main content

oak_vbnet/
lib.rs

1#![doc = include_str!("readme.md")]
2#![feature(new_range_api)]
3#![warn(missing_docs)]
4#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
5#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
6
7use oak_core::builder::Builder;
8
9/// AST module containing high-level VB.NET syntax tree definitions.
10pub mod ast;
11/// Builder module for converting green trees into high-level AST nodes.
12pub mod builder;
13/// Language definition and configuration for VB.NET.
14pub mod language;
15/// Lexer implementation for VB.NET.
16pub mod lexer;
17/// Parser implementation for VB.NET.
18pub mod parser;
19
20pub use ast::VbNetRoot;
21pub use builder::VbNetBuilder;
22pub use language::VbNetLanguage;
23pub use lexer::{VbNetLexer, token_type::VbNetTokenType};
24pub use parser::VbNetParser;
25
26/// Parses VB.NET source code into a [VbNetRoot] AST.
27///
28/// This is a convenience function that initializes the language, builder,
29/// and parser to process the source text.
30///
31/// # Errors
32///
33/// Returns an [oak_core::OakError] if parsing fails.
34pub fn parse(source: &str) -> Result<VbNetRoot, oak_core::OakError> {
35    let language = VbNetLanguage::new();
36    let builder = VbNetBuilder::new(&language);
37    let source_text = oak_core::source::SourceText::new(source);
38    let mut session = oak_core::parser::ParseSession::<VbNetLanguage>::default();
39    let output = builder.build(&source_text, &[], &mut session);
40    output.result
41}
42
43/// Parses VB.NET source code into a [VbNetRoot] AST using a caching parse session.
44///
45/// This function uses a [CachingParseSession] to cache parsed results for improved performance
46/// when processing the same content multiple times.
47///
48/// # Errors
49///
50/// Returns an [oak_core::OakError] if parsing fails.
51pub fn parse_with_cache(source: &str, cache: &mut oak_core::parser::CachingParseSession<VbNetLanguage, oak_core::parser::ParseSession<VbNetLanguage>>) -> Result<VbNetRoot, oak_core::OakError> {
52    use oak_core::ParseCache;
53
54    let language = VbNetLanguage::new();
55    let builder = VbNetBuilder::new(&language);
56    let source_text = oak_core::source::SourceText::new(source);
57
58    // Parse the code
59    let output = builder.build(&source_text, &[], cache);
60
61    // Return the result
62    output.result
63}