2021-10-14 01:33:46 -07:00
|
|
|
use crate::command_tree::CommandTree;
|
|
|
|
use crate::directive_actions::DirectiveAction;
|
2019-06-02 00:18:37 -07:00
|
|
|
|
2019-06-01 13:11:07 -07:00
|
|
|
pub fn directives_from_pass_names(pass_names: &Vec<String>) -> CommandTree {
|
2021-10-07 01:19:35 -07:00
|
|
|
let passes_directives: Vec<CommandTree> = pass_names
|
|
|
|
.iter()
|
|
|
|
.map(|pass_name| {
|
|
|
|
if pass_name == "parsing" {
|
|
|
|
CommandTree::nonterm(
|
|
|
|
pass_name,
|
|
|
|
None,
|
|
|
|
vec![
|
|
|
|
CommandTree::nonterm_no_further_tab_completions("compact", None),
|
|
|
|
CommandTree::nonterm_no_further_tab_completions("expanded", None),
|
|
|
|
CommandTree::nonterm_no_further_tab_completions("trace", None),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
} else {
|
|
|
|
CommandTree::nonterm_no_further_tab_completions(pass_name, None)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.collect();
|
|
|
|
CommandTree::Top(get_list(&passes_directives, true))
|
2019-06-05 02:48:45 -07:00
|
|
|
}
|
2019-05-22 03:32:00 -07:00
|
|
|
|
2019-06-05 02:48:45 -07:00
|
|
|
fn get_list(passes_directives: &Vec<CommandTree>, include_help: bool) -> Vec<CommandTree> {
|
2021-10-07 01:19:35 -07:00
|
|
|
use DirectiveAction::*;
|
2019-06-05 02:48:45 -07:00
|
|
|
|
2021-10-07 01:19:35 -07:00
|
|
|
vec![
|
|
|
|
CommandTree::terminal("exit", Some("exit the REPL"), vec![], QuitProgram),
|
2021-10-14 00:56:01 -07:00
|
|
|
//TODO there should be an alias for this
|
2021-10-07 01:19:35 -07:00
|
|
|
CommandTree::terminal("quit", Some("exit the REPL"), vec![], QuitProgram),
|
|
|
|
CommandTree::terminal(
|
|
|
|
"help",
|
|
|
|
Some("Print this help message"),
|
|
|
|
if include_help {
|
|
|
|
get_list(passes_directives, false)
|
|
|
|
} else {
|
|
|
|
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::terminal(
|
|
|
|
"doc",
|
|
|
|
Some("Get language-specific help for an item"),
|
|
|
|
vec![],
|
|
|
|
Doc,
|
|
|
|
),
|
|
|
|
]
|
2019-05-22 03:32:00 -07:00
|
|
|
}
|