maya-mel 0.1.4

Single-entry Autodesk Maya MEL parsing and analysis library.
Documentation
use maya_mel::{analyze, collect_top_level_facts, parse_source};

#[test]
fn root_api_covers_common_workflow() {
    let parse = parse_source("global proc hello() {} hello();");
    let analysis = analyze(&parse.syntax, parse.source_view());
    let facts = collect_top_level_facts(&parse);

    assert!(analysis.diagnostics.is_empty());
    assert!(!facts.items.is_empty());
}

#[test]
fn advanced_modules_remain_public() {
    let lexed = maya_mel::lexer::lex("polyCube -w 1;");
    let parse = maya_mel::parser::parse_source("global proc hello() {}");
    let light = maya_mel::parser::parse_light_source("polyCube -w 1;");
    let facts = maya_mel::maya::collect_top_level_facts_light(&light);
    let range = maya_mel::syntax::text_range(0, 4);
    let mode = maya_mel::sema::command_norm::CommandMode::Create;

    let _: &maya_mel::ast::SourceFile = &parse.syntax;
    let _: maya_mel::maya::model::MayaLightTopLevelFacts = facts.clone();
    let _ = maya_mel::maya::model::MayaTopLevelItem::Proc {
        name: String::from("hello"),
        is_global: true,
        span: range,
    };
    let _ = maya_mel::sema::command_schema::CommandModeMask {
        create: true,
        edit: false,
        query: false,
    };

    assert_eq!(lexed.diagnostics.len(), 0);
    assert_eq!(facts.items.len(), 1);
    assert_eq!(maya_mel::syntax::range_end(range), 4);
    assert!(matches!(
        mode,
        maya_mel::sema::command_norm::CommandMode::Create
    ));
}