diff --git a/examples/repl.rs b/examples/repl.rs index 39daf39c..4ba75597 100644 --- a/examples/repl.rs +++ b/examples/repl.rs @@ -1,4 +1,4 @@ -use rhai::{Engine, EvalAltResult, Scope, AST}; +use rhai::{Engine, EvalAltResult, Position, Scope, AST}; #[cfg(not(feature = "no_optimize"))] use rhai::OptimizationLevel; @@ -26,27 +26,18 @@ fn print_error(input: &str, err: EvalAltResult) { }; // Print error - let pos_text = format!(" ({})", err.position()); + let pos = err.position(); + let pos_text = format!(" ({})", pos); - match err.position() { - p if p.is_eof() => { - // EOF - let last = lines[lines.len() - 1]; - println!("{}{}", line_no, last); + let pos = if pos.is_eof() { + let last = lines[lines.len() - 1]; + Position::new(lines.len(), last.len() + 1) + } else { + pos + }; - let err_text = match err { - EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => { - format!("Runtime error: {}", err) - } - _ => err.to_string(), - }; - - println!( - "{}^ {}", - padding(" ", line_no.len() + last.len() - 1), - err_text.replace(&pos_text, "") - ); - } + match pos { + p if p.is_eof() => panic!("should not be EOF"), p if p.is_none() => { // No position println!("{}", err); @@ -59,7 +50,7 @@ fn print_error(input: &str, err: EvalAltResult) { EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => { format!("Runtime error: {}", err) } - _ => err.to_string(), + err => err.to_string(), }; println!( diff --git a/examples/rhai_runner.rs b/examples/rhai_runner.rs index b26b4aa1..20f6226e 100644 --- a/examples/rhai_runner.rs +++ b/examples/rhai_runner.rs @@ -1,4 +1,4 @@ -use rhai::{Engine, EvalAltResult}; +use rhai::{Engine, EvalAltResult, Position}; #[cfg(not(feature = "no_optimize"))] use rhai::OptimizationLevel; @@ -26,31 +26,29 @@ fn eprint_error(input: &str, err: EvalAltResult) { let lines: Vec<_> = input.split('\n').collect(); // Print error - match err.position() { - p if p.is_eof() => { - // EOF - let line = lines.len() - 1; - let pos = lines[line - 1].len(); - let err_text = match err { - EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => { - format!("Runtime error: {}", err) - } - _ => err.to_string(), - }; - eprint_line(&lines, line, pos, &err_text); - } + let pos = if err.position().is_eof() { + let last = lines[lines.len() - 1]; + Position::new(lines.len(), last.len() + 1) + } else { + err.position() + }; + + match pos { + p if p.is_eof() => panic!("should not be EOF"), p if p.is_none() => { // No position eprintln!("{}", err); } p => { // Specific position - eprint_line( - &lines, - p.line().unwrap(), - p.position().unwrap(), - &err.to_string(), - ) + let err_text = match err { + EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => { + format!("Runtime error: {}", err) + } + err => err.to_string(), + }; + + eprint_line(&lines, p.line().unwrap(), p.position().unwrap(), &err_text) } } }