Slight refactor of REPL code
In preparation for multi-line REPL input
This commit is contained in:
parent
f3f1dcc0a4
commit
3256935946
@ -33,7 +33,7 @@ impl Repl {
|
|||||||
languages,
|
languages,
|
||||||
current_language_index,
|
current_language_index,
|
||||||
interpreter_directive_sigil: ':',
|
interpreter_directive_sigil: ':',
|
||||||
line_reader
|
line_reader,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,16 +90,7 @@ impl Repl {
|
|||||||
},
|
},
|
||||||
Ok(ReadResult::Eof) => break,
|
Ok(ReadResult::Eof) => break,
|
||||||
Ok(ReadResult::Signal(_)) => break,
|
Ok(ReadResult::Signal(_)) => break,
|
||||||
Ok(ReadResult::Input(ref input)) => {
|
Ok(ReadResult::Input(input)) => self.input_loop(input),
|
||||||
self.line_reader.add_history_unique(input.to_string());
|
|
||||||
let output = match input.chars().nth(0) {
|
|
||||||
Some(ch) if ch == self.interpreter_directive_sigil => self.handle_interpreter_directive(input),
|
|
||||||
_ => Some(self.input_handler(input)),
|
|
||||||
};
|
|
||||||
if let Some(o) = output {
|
|
||||||
println!("=> {}", o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.line_reader.save_history(HISTORY_SAVE_FILE).unwrap_or(());
|
self.line_reader.save_history(HISTORY_SAVE_FILE).unwrap_or(());
|
||||||
@ -107,6 +98,23 @@ impl Repl {
|
|||||||
println!("Exiting...");
|
println!("Exiting...");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn input_loop(&mut self, input: String) {
|
||||||
|
if input == "" {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.chars().nth(0).unwrap() == self.interpreter_directive_sigil {
|
||||||
|
if let Some(output) = self.handle_interpreter_directive(&input) {
|
||||||
|
println!("{}", output);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let output = self.input_handler(&input);
|
||||||
|
self.line_reader.add_history_unique(input.clone());
|
||||||
|
println!("=> {}", output);
|
||||||
|
}
|
||||||
|
|
||||||
fn input_handler(&mut self, input: &str) -> String {
|
fn input_handler(&mut self, input: &str) -> String {
|
||||||
let ref mut language = self.languages[self.current_language_index];
|
let ref mut language = self.languages[self.current_language_index];
|
||||||
let interpreter_output = language.execute_pipeline(input, &self.options);
|
let interpreter_output = language.execute_pipeline(input, &self.options);
|
||||||
|
Loading…
Reference in New Issue
Block a user