Add EvalAltResult::clear_position().
This commit is contained in:
parent
ec18bd26a2
commit
b96c832141
@ -16,6 +16,7 @@ Enhancements
|
|||||||
|
|
||||||
* Source information is provided when there is an error within a call to a function defined in another module.
|
* Source information is provided when there is an error within a call to a function defined in another module.
|
||||||
* Source information is provided to the `NativeCallContext` for native Rust functions.
|
* Source information is provided to the `NativeCallContext` for native Rust functions.
|
||||||
|
* `EvalAltResult::clear_position` to clear the position information of an error - useful when only the message is needed and the position doesn't need to be printed out.
|
||||||
|
|
||||||
|
|
||||||
Version 0.19.9
|
Version 0.19.9
|
||||||
|
@ -11,9 +11,10 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Pretty-print error.
|
/// Pretty-print error.
|
||||||
fn print_error(input: &str, err: EvalAltResult) {
|
fn print_error(input: &str, mut err: EvalAltResult) {
|
||||||
let lines: Vec<_> = input.trim().split('\n').collect();
|
let lines: Vec<_> = input.trim().split('\n').collect();
|
||||||
let pos = err.position();
|
let pos = err.position();
|
||||||
|
err.clear_position();
|
||||||
|
|
||||||
let line_no = if lines.len() > 1 {
|
let line_no = if lines.len() > 1 {
|
||||||
if pos.is_none() {
|
if pos.is_none() {
|
||||||
@ -26,8 +27,6 @@ fn print_error(input: &str, err: EvalAltResult) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Print error position
|
// Print error position
|
||||||
let pos_text = format!(" ({})", pos);
|
|
||||||
|
|
||||||
if pos.is_none() {
|
if pos.is_none() {
|
||||||
// No position
|
// No position
|
||||||
println!("{}", err);
|
println!("{}", err);
|
||||||
@ -40,7 +39,7 @@ fn print_error(input: &str, err: EvalAltResult) {
|
|||||||
"{0:>1$} {2}",
|
"{0:>1$} {2}",
|
||||||
"^",
|
"^",
|
||||||
line_no.len() + pos.position().unwrap(),
|
line_no.len() + pos.position().unwrap(),
|
||||||
err.to_string().replace(&pos_text, "")
|
err
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,19 +5,17 @@ use rhai::OptimizationLevel;
|
|||||||
|
|
||||||
use std::{env, fs::File, io::Read, process::exit};
|
use std::{env, fs::File, io::Read, process::exit};
|
||||||
|
|
||||||
fn eprint_error(input: &str, err: EvalAltResult) {
|
fn eprint_error(input: &str, mut err: EvalAltResult) {
|
||||||
fn eprint_line(lines: &[&str], pos: Position, err: &str) {
|
fn eprint_line(lines: &[&str], pos: Position, err_msg: &str) {
|
||||||
let line = pos.line().unwrap();
|
let line = pos.line().unwrap();
|
||||||
|
|
||||||
let line_no = format!("{}: ", line);
|
let line_no = format!("{}: ", line);
|
||||||
let pos_text = format!(" ({})", pos);
|
|
||||||
|
|
||||||
eprintln!("{}{}", line_no, lines[line - 1]);
|
eprintln!("{}{}", line_no, lines[line - 1]);
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"{:>1$} {2}",
|
"{:>1$} {2}",
|
||||||
"^",
|
"^",
|
||||||
line_no.len() + pos.position().unwrap(),
|
line_no.len() + pos.position().unwrap(),
|
||||||
err.replace(&pos_text, "")
|
err_msg
|
||||||
);
|
);
|
||||||
eprintln!("");
|
eprintln!("");
|
||||||
}
|
}
|
||||||
@ -26,6 +24,7 @@ fn eprint_error(input: &str, err: EvalAltResult) {
|
|||||||
|
|
||||||
// Print error
|
// Print error
|
||||||
let pos = err.position();
|
let pos = err.position();
|
||||||
|
err.clear_position();
|
||||||
|
|
||||||
if pos.is_none() {
|
if pos.is_none() {
|
||||||
// No position
|
// No position
|
||||||
|
@ -366,6 +366,11 @@ impl EvalAltResult {
|
|||||||
| Self::Return(_, pos) => *pos,
|
| Self::Return(_, pos) => *pos,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// Clear the [position][Position] information of this error.
|
||||||
|
pub fn clear_position(&mut self) -> &mut Self {
|
||||||
|
self.set_position(Position::NONE);
|
||||||
|
self
|
||||||
|
}
|
||||||
/// Override the [position][Position] of this error.
|
/// Override the [position][Position] of this error.
|
||||||
pub fn set_position(&mut self, new_position: Position) {
|
pub fn set_position(&mut self, new_position: Position) {
|
||||||
match self {
|
match self {
|
||||||
|
Loading…
Reference in New Issue
Block a user