factorio-codegen 0.1.0

Lua code generator for factorio-rs
Documentation
mod common;

use common::must_ok;
use factorio_codegen::LuaGenerator;
use factorio_ir::{
    block::Block,
    function::Function,
    module::{ImportedItem, Module, ModuleImport, Symbol},
    scope::Scope,
    stage::Stage,
    statement::Statement,
};

#[test]
fn generates_require_statements() {
    let module = Module {
        name: "on_init".to_string(),
        stage: Stage::Control,
        body: Block { statements: vec![] },
        imports: vec![ModuleImport {
            module: "player".to_string(),
            local: "player".to_string(),
            items: vec![ImportedItem {
                name: "MyPlayer".to_string(),
                local: "MyPlayer".to_string(),
            }],
        }],
        submodules: vec![],
        locales: vec![],
        symbols: vec![Symbol {
            scope: Scope::Public,
            statement: Statement::FunctionDecl(Function {
                name: "on_init".to_string(),
                params: vec![],
                body: Block { statements: vec![] },
                doc: None,
                debug: None,
                event: None,
                event_filter: None,
            }),
        }],
    };

    let output = must_ok(LuaGenerator::new().generate_module(&module));

    assert_eq!(
        output,
        concat!(
            "-- Generated by factorio-rs@",
            env!("CARGO_PKG_VERSION"),
            "\n-- Module: `on_init`\n",
            "local player = require(\"__mod__/lua/player\")\n",
            "local MyPlayer = player.MyPlayer\n",
            "\n",
            "local onInit = {}\n",
            "function onInit.on_init()\n",
            "end\n",
            "return onInit\n",
        )
    );
}