irust 0.4.5

Cross Platform Rust Repl
use crate::irust::{
    printer::{Printer, PrinterItem, PrinterItemType},
    OUT,
};

pub fn format_eval_output(output: &str) -> Printer {
    let mut eval_output = Printer::default();
    if output.contains("irust v0.1.0 (/tmp/irust)") {
        // Consider this an error
        let lines_count = output.lines().count();

        let actual_error = output
            .lines()
            .skip(1)
            .take(lines_count - 8)
            .collect::<Vec<&str>>()
            .join("\n");

        eval_output.push(PrinterItem::new(actual_error, PrinterItemType::Err));
    } else {
        eval_output.push(PrinterItem::new(OUT.into(), PrinterItemType::Out));
        eval_output.push(PrinterItem::new(output.into(), PrinterItemType::Eval));
    }

    eval_output
}

pub fn warn_about_common_mistakes(input: &str) -> Option<Printer> {
    let mut outputs = Printer::new(PrinterItem::new("IRust: ".into(), PrinterItemType::IRust));

    // if input = `x = something`
    if input.split('=').count() == 2 && input.split('=').map(str::trim).all(|s| !s.is_empty()) {
        outputs.push(PrinterItem::new(
            "Are you missing a `;` ?".into(),
            PrinterItemType::Warn,
        ));
        return Some(outputs);
    }

    // if there were no mistakes return None
    None
}