#run { set_build_options_dc(.{ do_output = false }); args := get_build_options().compile_time_command_line; usage :: () { print("creates the template for a module or submodule\n\n"); print("usage: jai _make_module.jai - (module|submodule) [path]\n\n"); print("options:\n"); print("\tpath: a simple module path without an extension (example: 'foo' or 'foo/bar')\n"); } if args.count < 2 { usage(); return; } kind := trim(args[0]); if kind.count == 0 { usage(); return; } module_path := trim(args[1]); if module_path.count == 0 { usage(); return; } if kind == { case "module"; assert(make_directory_if_it_does_not_exist(module_path), "could not create module directory: '%'", module_path); entry_file := tprint("%/module.jai", module_path); assert(write_entire_file(entry_file, tprint(MODULE_STRING, module_path)), "could not create %", entry_file); case "submodule"; entry_file := tprint("%.jai", module_path); assert(write_entire_file(entry_file, tprint(SUBMODULE_STRING, module_path)), "could not create %", entry_file); case; usage(); return; } } MODULE_STRING :: #string END // %1 is a module that does things. // #module_parameters(RUN_TESTS := false, IMPORTED_INTERNALLY := false); #scope_export; #if !IMPORTED_INTERNALLY { // #import "jc/%1/submodule"(RUN_TESTS); // ... } END; SUBMODULE_STRING :: #string END // %1 is a module that does stuff. // #module_parameters(RUN_TESTS := false); #scope_export; // ... #scope_file; // ---------------------------------------------------------- // TESTS // ---------------------------------------------------------- #if RUN_TESTS #run { test :: #import "jc/meta/test"; test.run("%1:works", t => { test.expect(t, true); }); } END; #import "File"; #import "Basic"; #import "String"; #import "Compiler";