darklua 0.18.0

Transform Lua scripts
Documentation
use darklua_core::rules::{ConvertSquareRootCall, Rule};

test_rule!(
    convert_square_root_call,
    ConvertSquareRootCall::default(),
    constant("return math.sqrt(16)") => "return 16 ^ 0.5",
    variable("return math.sqrt(x)") => "return x ^ 0.5",
    binary_expression("return math.sqrt(x + y)") => "return (x + y) ^ 0.5",
    function_call("return math.sqrt(call())") => "return call() ^ 0.5",
    complex_expression("return math.sqrt((a + b) * c)") => "return ((a + b) * c) ^ 0.5",
    in_function("local function test(x) return math.sqrt(x) end") => "local function test(x) return x ^ 0.5 end",
    in_assignment("local result = math.sqrt(25)") => "local result = 25 ^ 0.5",
    in_binary_expression("local result = math.sqrt(16) + 5") => "local result = 16 ^ 0.5 + 5",
    as_statement("math.sqrt(16)") => "do end",
    as_statement_preserve_side_effect("math.sqrt(calculate())") => "calculate()",
    as_statement_preserve_multiple_side_effect("math.sqrt(calculate() + getResult())")
        => "local _ = calculate() + getResult()",
);

test_rule_without_effects!(
    ConvertSquareRootCall::default(),
    multiple_arguments("math.sqrt(16, 25)"),
    no_arguments("math.sqrt()"),
    math_abs_call("math.abs(16)"),
    shadowed_math_library("local math = {} math.sqrt(16)"),
);

#[test]
fn deserialize_from_object_notation() {
    json5::from_str::<Box<dyn Rule>>(
        r#"{
        rule: 'convert_square_root_call',
    }"#,
    )
    .unwrap();
}

#[test]
fn deserialize_from_string() {
    json5::from_str::<Box<dyn Rule>>("'convert_square_root_call'").unwrap();
}