use crate::code::{CrateType, Input};
use syn::Expr;
mod parse;
#[cfg(test)]
mod tests;
pub use self::parse::parse_command;
pub use self::parse::parse_program;
#[derive(Debug, PartialEq)]
pub enum InputResult {
Command(String),
Program(Input),
Empty,
More,
Eof,
InputError(String),
}
pub fn determine_result(input: &str, line: &str, treat_as_cmd: bool) -> InputResult {
if input.is_empty() {
return InputResult::Empty; }
if treat_as_cmd || is_command(line) {
parse_command(line)
} else {
match parse_program(input) {
InputResult::Program(input) if input.stmts.last().map(|x| x.semi).unwrap_or(false) => {
InputResult::More
}
x => x,
}
}
}
fn is_command(line: &str) -> bool {
line.starts_with(crate::CMD_PREFIX)
}