schala/schala-repl/src/repl/directives.rs

97 lines
3.4 KiB
Rust
Raw Normal View History

2019-06-02 00:27:12 -07:00
use crate::repl::command_tree::CommandTree;
use crate::repl::directive_actions::DirectiveAction;
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
}