darklua 0.16.0

Transform Lua scripts
Documentation
use darklua_core::{
    rules::{self, Rule},
    Configuration, Options,
};

mod bench_utils;

bench_utils::generate_bench!(roact, {
    resources = {
        "src" => bench_utils::roact_content("."),
    },
    options = {
        default_run => Options::new("src").with_configuration(Configuration::default()),
        dense_rewrite => Options::new("src").with_configuration(Configuration::empty()),
        minify => Options::new("src").with_configuration({
            let rules: Vec<Box<dyn Rule>> = vec![
                Box::<rules::RemoveSpaces>::default(),
                Box::<rules::RemoveComments>::default(),
                Box::<rules::ComputeExpression>::default(),
                Box::<rules::RemoveUnusedIfBranch>::default(),
                Box::<rules::RemoveUnusedWhile>::default(),
                Box::<rules::FilterAfterEarlyReturn>::default(),
                Box::<rules::RemoveEmptyDo>::default(),
                Box::<rules::RemoveMethodDefinition>::default(),
                Box::<rules::ConvertIndexToField>::default(),
                Box::<rules::RemoveNilDeclaration>::default(),
                Box::new(rules::RenameVariables::default().with_function_names()),
                Box::<rules::RemoveFunctionCallParens>::default(),
            ];

            rules.into_iter().fold(
                Configuration::empty()
                    .with_generator(darklua_core::GeneratorParameters::Dense { column_span: 80 }),
                |config, rule| config.with_rule(rule)
            )
        }),
    },
});

bench_utils::generate_bench!(crosswalk, {
    resources = {
        "src" => bench_utils::crosswalk_content("."),
        "debug-config.json5" =>
            include_str!("../bench_content/crosswalk/scripts/darklua/debug.json5"),
        "prod-config.json5" =>
            include_str!("../bench_content/crosswalk/scripts/darklua/prod.json5"),
    },
    options = {
        default_run => Options::new("src").with_configuration(Configuration::default()),
        dense_rewrite => Options::new("src").with_configuration(Configuration::empty()),
        debug_config => Options::new("src").with_configuration_at("debug-config.json5"),
        prod_config => Options::new("src").with_configuration_at("prod-config.json5"),
    },
});

criterion::criterion_group!(
    name = process;
    config = criterion::Criterion::default();
    targets = roact, crosswalk
);
criterion::criterion_main!(process);