#pragma once #include <cstring> #include <sstream> #include <unordered_map> #include <unordered_set> #include <vector> #include <iostream> namespace nasal::cli { enum class option { cli_help, cli_version, cli_repl_mode, cli_view_ast, cli_view_raw_ast, cli_view_code, cli_show_symbol, cli_execute, cli_show_execute_time, cli_detail_info, cli_show_referenced_file, cli_debug_mode, cli_profile, cli_profile_all, cli_limit_mode }; struct cli_config { std::string input_file_path = ""; std::unordered_set<option> options = {}; std::vector<std::string> nasal_vm_args = {}; bool has(option opt) const { return options.count(opt); } }; const std::unordered_map<std::string, option> cli_options = { {"-h", option::cli_help}, {"--help", option::cli_help}, {"-v", option::cli_version}, {"--version", option::cli_version}, {"-r", option::cli_repl_mode}, {"--repl", option::cli_repl_mode}, {"-a", option::cli_view_ast}, {"--ast", option::cli_view_ast}, {"--raw-ast", option::cli_view_raw_ast}, {"-c", option::cli_view_code}, {"--code", option::cli_view_code}, {"-s", option::cli_show_symbol}, {"--symbol", option::cli_show_symbol}, {"-e", option::cli_execute}, {"--exec", option::cli_execute}, {"-t", option::cli_show_execute_time}, {"--time", option::cli_show_execute_time}, {"-d", option::cli_detail_info}, {"--detail", option::cli_detail_info}, {"-f", option::cli_show_referenced_file}, {"--ref-file", option::cli_show_referenced_file}, {"-dbg", option::cli_debug_mode}, {"--debug", option::cli_debug_mode}, {"--prof", option::cli_profile}, {"--prof-all", option::cli_profile_all}, {"--limit", option::cli_limit_mode} }; cli_config parse(const std::vector<std::string>&); std::ostream& help(std::ostream&); }