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)") {
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.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);
}
None
}