use crate::repl::command_tree::CommandTree; use crate::repl::directive_actions::DirectiveAction; pub fn directives_from_pass_names(pass_names: &Vec) -> CommandTree { use DirectiveAction::*; let passes_directives: Vec = pass_names.iter() .map(|pass_name| { CommandTree::nonterm_no_further_tab_completions(pass_name, None) }) .collect(); CommandTree::Top(vec![ CommandTree::terminal("exit", Some("exit the REPL"), vec![], QuitProgram), CommandTree::terminal("quit", Some("exit the REPL"), vec![], QuitProgram), CommandTree::terminal("help", Some("Print this help message"), vec![], Help), CommandTree::nonterm("debug", Some("Configure debug information"), vec![ CommandTree::terminal("list-passes", Some("List all registered compiler passes"), vec![], ListPasses), CommandTree::terminal("show-immediate", None, passes_directives.clone(), ShowImmediate), CommandTree::terminal("show", Some("Show debug output for a specific pass"), passes_directives.clone(), Show), CommandTree::terminal("hide", Some("Hide debug output for a specific pass"), passes_directives.clone(), Hide), CommandTree::nonterm("total-time", None, vec![ CommandTree::terminal("on", None, vec![], TotalTimeOn), CommandTree::terminal("off", None, vec![], TotalTimeOff), ]), CommandTree::nonterm("stage-times", Some("Computation time per-stage"), vec![ CommandTree::terminal("on", None, vec![], StageTimeOn), CommandTree::terminal("off", None, vec![], StageTimeOff), ]) ] ), CommandTree::nonterm("lang", Some("switch between languages, or go directly to a langauge by name"), vec![ CommandTree::nonterm_no_further_tab_completions("next", None), CommandTree::nonterm_no_further_tab_completions("prev", None), CommandTree::nonterm("go", None, vec![]), ] ), CommandTree::terminal("doc", Some("Get language-specific help for an item"), vec![], Doc), ]) }