Refactor error display.
This commit is contained in:
parent
b603a85bca
commit
ff8756018b
@ -1,4 +1,4 @@
|
|||||||
use rhai::{Engine, EvalAltResult, Scope, AST};
|
use rhai::{Engine, EvalAltResult, Position, Scope, AST};
|
||||||
|
|
||||||
#[cfg(not(feature = "no_optimize"))]
|
#[cfg(not(feature = "no_optimize"))]
|
||||||
use rhai::OptimizationLevel;
|
use rhai::OptimizationLevel;
|
||||||
@ -26,27 +26,18 @@ fn print_error(input: &str, err: EvalAltResult) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Print error
|
// Print error
|
||||||
let pos_text = format!(" ({})", err.position());
|
let pos = err.position();
|
||||||
|
let pos_text = format!(" ({})", pos);
|
||||||
|
|
||||||
match err.position() {
|
let pos = if pos.is_eof() {
|
||||||
p if p.is_eof() => {
|
let last = lines[lines.len() - 1];
|
||||||
// EOF
|
Position::new(lines.len(), last.len() + 1)
|
||||||
let last = lines[lines.len() - 1];
|
} else {
|
||||||
println!("{}{}", line_no, last);
|
pos
|
||||||
|
};
|
||||||
|
|
||||||
let err_text = match err {
|
match pos {
|
||||||
EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => {
|
p if p.is_eof() => panic!("should not be EOF"),
|
||||||
format!("Runtime error: {}", err)
|
|
||||||
}
|
|
||||||
_ => err.to_string(),
|
|
||||||
};
|
|
||||||
|
|
||||||
println!(
|
|
||||||
"{}^ {}",
|
|
||||||
padding(" ", line_no.len() + last.len() - 1),
|
|
||||||
err_text.replace(&pos_text, "")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
p if p.is_none() => {
|
p if p.is_none() => {
|
||||||
// No position
|
// No position
|
||||||
println!("{}", err);
|
println!("{}", err);
|
||||||
@ -59,7 +50,7 @@ fn print_error(input: &str, err: EvalAltResult) {
|
|||||||
EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => {
|
EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => {
|
||||||
format!("Runtime error: {}", err)
|
format!("Runtime error: {}", err)
|
||||||
}
|
}
|
||||||
_ => err.to_string(),
|
err => err.to_string(),
|
||||||
};
|
};
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use rhai::{Engine, EvalAltResult};
|
use rhai::{Engine, EvalAltResult, Position};
|
||||||
|
|
||||||
#[cfg(not(feature = "no_optimize"))]
|
#[cfg(not(feature = "no_optimize"))]
|
||||||
use rhai::OptimizationLevel;
|
use rhai::OptimizationLevel;
|
||||||
@ -26,31 +26,29 @@ fn eprint_error(input: &str, err: EvalAltResult) {
|
|||||||
let lines: Vec<_> = input.split('\n').collect();
|
let lines: Vec<_> = input.split('\n').collect();
|
||||||
|
|
||||||
// Print error
|
// Print error
|
||||||
match err.position() {
|
let pos = if err.position().is_eof() {
|
||||||
p if p.is_eof() => {
|
let last = lines[lines.len() - 1];
|
||||||
// EOF
|
Position::new(lines.len(), last.len() + 1)
|
||||||
let line = lines.len() - 1;
|
} else {
|
||||||
let pos = lines[line - 1].len();
|
err.position()
|
||||||
let err_text = match err {
|
};
|
||||||
EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => {
|
|
||||||
format!("Runtime error: {}", err)
|
match pos {
|
||||||
}
|
p if p.is_eof() => panic!("should not be EOF"),
|
||||||
_ => err.to_string(),
|
|
||||||
};
|
|
||||||
eprint_line(&lines, line, pos, &err_text);
|
|
||||||
}
|
|
||||||
p if p.is_none() => {
|
p if p.is_none() => {
|
||||||
// No position
|
// No position
|
||||||
eprintln!("{}", err);
|
eprintln!("{}", err);
|
||||||
}
|
}
|
||||||
p => {
|
p => {
|
||||||
// Specific position
|
// Specific position
|
||||||
eprint_line(
|
let err_text = match err {
|
||||||
&lines,
|
EvalAltResult::ErrorRuntime(err, _) if !err.is_empty() => {
|
||||||
p.line().unwrap(),
|
format!("Runtime error: {}", err)
|
||||||
p.position().unwrap(),
|
}
|
||||||
&err.to_string(),
|
err => err.to_string(),
|
||||||
)
|
};
|
||||||
|
|
||||||
|
eprint_line(&lines, p.line().unwrap(), p.position().unwrap(), &err_text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user