Halfway through implementing help text on CommandTree
This commit is contained in:
parent
17a4028185
commit
ee55729d5f
@ -131,26 +131,33 @@ fn run_noninteractive(filename: &str, languages: Vec<Box<ProgrammingLanguageInte
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum CommandTree {
|
enum CommandTree {
|
||||||
Terminal(String),
|
Terminal(String, Option<String>),
|
||||||
NonTerminal(String, Vec<CommandTree>),
|
NonTerminal(String, Vec<CommandTree>, Option<String>),
|
||||||
Top(Vec<CommandTree>),
|
Top(Vec<CommandTree>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CommandTree {
|
impl CommandTree {
|
||||||
fn term(s: &str) -> CommandTree {
|
fn term(s: &str, help: Option<&str>) -> CommandTree {
|
||||||
CommandTree::Terminal(s.to_string())
|
CommandTree::Terminal(s.to_string(), help.map(|x| x.to_string()))
|
||||||
}
|
}
|
||||||
fn get_cmd(&self) -> String {
|
fn get_cmd(&self) -> String {
|
||||||
match self {
|
match self {
|
||||||
CommandTree::Terminal(s) => s.to_string(),
|
CommandTree::Terminal(s, _) => s.to_string(),
|
||||||
CommandTree::NonTerminal(s, _) => s.to_string(),
|
CommandTree::NonTerminal(s, _, _) => s.to_string(),
|
||||||
|
CommandTree::Top(_) => "".to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn get_help(&self) -> String {
|
||||||
|
match self {
|
||||||
|
CommandTree::Terminal(_, h) => h.as_ref().map(|h| h.clone()).unwrap_or(format!("")),
|
||||||
|
CommandTree::NonTerminal(_, _, h) => h.as_ref().map(|h| h.clone()).unwrap_or(format!("")),
|
||||||
CommandTree::Top(_) => "".to_string(),
|
CommandTree::Top(_) => "".to_string(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn get_children(&self) -> Vec<String> {
|
fn get_children(&self) -> Vec<String> {
|
||||||
match self {
|
match self {
|
||||||
CommandTree::Terminal(_) => vec![],
|
CommandTree::Terminal(_, _) => vec![],
|
||||||
CommandTree::NonTerminal(_, children) => children.iter().map(|x| x.get_cmd()).collect(),
|
CommandTree::NonTerminal(_, children, _) => children.iter().map(|x| x.get_cmd()).collect(),
|
||||||
CommandTree::Top(children) => children.iter().map(|x| x.get_cmd()).collect(),
|
CommandTree::Top(children) => children.iter().map(|x| x.get_cmd()).collect(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,8 +211,8 @@ impl<T: Terminal> Completer<T> for TabCompleteHandler {
|
|||||||
Some(s) => {
|
Some(s) => {
|
||||||
let new_ptr: Option<&CommandTree> = command_tree.and_then(|cm| match cm {
|
let new_ptr: Option<&CommandTree> = command_tree.and_then(|cm| match cm {
|
||||||
CommandTree::Top(children) => children.iter().find(|c| c.get_cmd() == s),
|
CommandTree::Top(children) => children.iter().find(|c| c.get_cmd() == s),
|
||||||
CommandTree::NonTerminal(_, children) => children.iter().find(|c| c.get_cmd() == s),
|
CommandTree::NonTerminal(_, children, _) => children.iter().find(|c| c.get_cmd() == s),
|
||||||
CommandTree::Terminal(_) => None,
|
CommandTree::Terminal(_, _) => None,
|
||||||
});
|
});
|
||||||
command_tree = new_ptr;
|
command_tree = new_ptr;
|
||||||
}
|
}
|
||||||
@ -321,18 +328,18 @@ impl Repl {
|
|||||||
|
|
||||||
fn get_directives(&self, passes: &Vec<String>) -> CommandTree {
|
fn get_directives(&self, passes: &Vec<String>) -> CommandTree {
|
||||||
CommandTree::Top(vec![
|
CommandTree::Top(vec![
|
||||||
CommandTree::term("exit"),
|
CommandTree::term("exit", Some("exit the REPL")),
|
||||||
CommandTree::term("quit"),
|
CommandTree::term("quit", Some("exit the REPL")),
|
||||||
CommandTree::NonTerminal(format!("debug"), vec![
|
CommandTree::NonTerminal(format!("debug"), vec![
|
||||||
CommandTree::term("passes"),
|
CommandTree::term("passes", None),
|
||||||
CommandTree::NonTerminal(format!("show"), passes.iter().map(|p| CommandTree::term(p)).collect()),
|
CommandTree::NonTerminal(format!("show"), passes.iter().map(|p| CommandTree::term(p, None)).collect(), None),
|
||||||
CommandTree::NonTerminal(format!("hide"), passes.iter().map(|p| CommandTree::term(p)).collect()),
|
CommandTree::NonTerminal(format!("hide"), passes.iter().map(|p| CommandTree::term(p, None)).collect(), None),
|
||||||
]),
|
], None),
|
||||||
CommandTree::NonTerminal(format!("lang"), vec![
|
CommandTree::NonTerminal(format!("lang"), vec![
|
||||||
CommandTree::term("next"),
|
CommandTree::term("next", None),
|
||||||
CommandTree::term("prev"),
|
CommandTree::term("prev", None),
|
||||||
CommandTree::NonTerminal(format!("go"), vec![])//TODO
|
CommandTree::NonTerminal(format!("go"), vec![], None)//TODO
|
||||||
]),
|
], None),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,10 +399,12 @@ impl Repl {
|
|||||||
|
|
||||||
writeln!(buf, "MetaInterpreter options").unwrap();
|
writeln!(buf, "MetaInterpreter options").unwrap();
|
||||||
writeln!(buf, "-----------------------").unwrap();
|
writeln!(buf, "-----------------------").unwrap();
|
||||||
|
/*
|
||||||
writeln!(buf, "exit | quit - exit the REPL").unwrap();
|
writeln!(buf, "exit | quit - exit the REPL").unwrap();
|
||||||
writeln!(buf, "debug [show|hide] <pass_name> - show or hide debug info for a given pass").unwrap();
|
writeln!(buf, "debug [show|hide] <pass_name> - show or hide debug info for a given pass").unwrap();
|
||||||
writeln!(buf, "debug passes - display the names of all passes").unwrap();
|
writeln!(buf, "debug passes - display the names of all passes").unwrap();
|
||||||
writeln!(buf, "lang [prev|next|go <name> |show] - toggle to previous or next language, go to a specific language by name, or show all languages").unwrap();
|
writeln!(buf, "lang [prev|next|go <name> |show] - toggle to previous or next language, go to a specific language by name, or show all languages").unwrap();
|
||||||
|
*/
|
||||||
writeln!(buf, "Language-specific help for {}", lang.get_language_name()).unwrap();
|
writeln!(buf, "Language-specific help for {}", lang.get_language_name()).unwrap();
|
||||||
writeln!(buf, "-----------------------").unwrap();
|
writeln!(buf, "-----------------------").unwrap();
|
||||||
writeln!(buf, "{}", lang.custom_interpreter_directives_help()).unwrap();
|
writeln!(buf, "{}", lang.custom_interpreter_directives_help()).unwrap();
|
||||||
|
Loading…
Reference in New Issue
Block a user