factorio-codegen 0.1.2

Lua code generator for factorio-rs
Documentation
mod common;

use common::must_ok;
use factorio_codegen::LuaGenerator;
use factorio_ir::{
    block::Block,
    function::{Function, Parameter},
    module::{Module, Symbol},
    scope::Scope,
    stage::Stage,
    statement::Statement,
    r#type::Type,
};

#[test]
fn generates_method_with_self_using_colon_syntax() {
    let module = Module {
        name: "player_util".to_string(),
        stage: Stage::Control,
        body: Block { statements: vec![] },
        imports: vec![],
        submodules: vec![],
        locales: vec![],
        symbols: vec![Symbol {
            scope: Scope::Public,
            statement: Statement::FunctionDecl(Function {
                name: "reset".to_string(),
                params: vec![
                    Parameter {
                        name: "self".to_string(),
                        r#type: Type::Void,
                        source_type: None,
                    },
                    Parameter {
                        name: "player".to_string(),
                        r#type: Type::Void,
                        source_type: None,
                    },
                ],
                body: Block {
                    statements: vec![Statement::Return(None)],
                },
                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: `player_util`\n",
            "local playerUtil = {}\n",
            "function playerUtil:reset(player)\n",
            "\treturn\n",
            "end\n",
            "return playerUtil\n",
        )
    );
}