oak-swift 0.0.11

High-performance incremental Swift parser for the oak ecosystem with flexible configuration, supporting iOS/macOS development and modern language features.
Documentation
use oak_core::{Builder, SourceText, builder::BuilderCache, parser::session::ParseSession};
use oak_swift::{SwiftBuilder, SwiftLanguage};

#[test]
fn test_basic_function() {
    let language = SwiftLanguage::default();
    let builder = SwiftBuilder::new(&language);
    let source = SourceText::new("func hello(name: String) {\n    return name\n}");
    let mut cache = ParseSession::default();
    let output = builder.build(&source, &[], &mut cache);

    assert!(output.result.is_ok());
    let ast = output.result.unwrap();
    assert_eq!(ast.program.statements.len(), 1);

    match &ast.program.statements[0] {
        oak_swift::ast::Statement::FunctionDef { name, parameters, .. } => {
            assert_eq!(name, "hello");
            assert_eq!(parameters.len(), 1);
            assert_eq!(parameters[0].name, "name");
            assert_eq!(parameters[0].type_annotation.name, "String")
        }
        _ => panic!("Expected function definition"),
    }
}

#[test]
fn test_variable_declaration() {
    let language = SwiftLanguage::default();
    let builder = SwiftBuilder::new(&language);
    let source = SourceText::new("let x = 42\nvar y = \"hello\"");
    let mut cache = ParseSession::default();
    let output = builder.build(&source, &[], &mut cache);

    assert!(output.result.is_ok());
    let ast = output.result.unwrap();
    assert_eq!(ast.program.statements.len(), 2);

    match &ast.program.statements[0] {
        oak_swift::ast::Statement::VariableDecl { name, is_mutable, .. } => {
            assert_eq!(name, "x");
            assert_eq!(*is_mutable, false)
        }
        _ => panic!("Expected variable declaration"),
    }

    match &ast.program.statements[1] {
        oak_swift::ast::Statement::VariableDecl { name, is_mutable, .. } => {
            assert_eq!(name, "y");
            assert_eq!(*is_mutable, true)
        }
        _ => panic!("Expected variable declaration"),
    }
}