yog-script-analyze 0.4.0

Yog Script (.ys, .yns) analyzed: its lexer, parser and syntax tree, names resolved, the class index model — what the build and the editors read a source with.
Documentation
use super::*;

#[test]
fn packages_are_namespaces_under_game() {
    let (ns, name) = of_class("net/minecraft/world/entity/player/Player").unwrap();
    assert_eq!(
        (ns.join("."), name.as_str()),
        ("World.Entity.Player".to_string(), "Player")
    );
    let (ns, name) = of_class("net/minecraft/network/chat/OutgoingChatMessage$Player").unwrap();
    assert_eq!(
        (ns.join("."), name.as_str()),
        ("Network.Chat".to_string(), "OutgoingChatMessage.Player")
    );
    let (ns, _) = of_class("com/mojang/blaze3d/vertex/PoseStack").unwrap();
    assert_eq!(ns.join("."), "Mojang.Blaze3d.Vertex");
    assert!(of_class("java/lang/Object").is_none());
}

#[test]
fn namespaces_are_packages_back() {
    let ns = |s: &str| s.split('.').map(String::from).collect::<Vec<_>>();
    assert_eq!(
        class_of(&ns("World.Entity.Player"), "Player"),
        "net/minecraft/world/entity/player/Player"
    );
    assert_eq!(
        class_of(&ns("Network.Chat"), "OutgoingChatMessage.Player"),
        "net/minecraft/network/chat/OutgoingChatMessage$Player"
    );
    assert_eq!(
        class_of(&ns("Mojang.Blaze3d.Vertex"), "PoseStack"),
        "com/mojang/blaze3d/vertex/PoseStack"
    );
    assert_eq!(class_of(&[], "Minecraft"), "net/minecraft/Minecraft");
}