Skip to content

Commit 5d353a3

Browse files
committed
Store trace into own error field
1 parent b65407d commit 5d353a3

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

crates/harp/src/error.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub enum Error {
2525
EvaluationError {
2626
code: String,
2727
message: String,
28+
trace: String,
2829
},
2930
UnsafeEvaluationError(String),
3031
UnexpectedLength(usize, usize),
@@ -89,8 +90,18 @@ impl fmt::Display for Error {
8990
write!(f, "Error parsing {}: {}", code, message)
9091
},
9192

92-
Error::EvaluationError { code, message } => {
93-
write!(f, "Error evaluating {}: {}", code, message)
93+
Error::EvaluationError {
94+
code,
95+
message,
96+
trace,
97+
} => {
98+
let mut msg = format!("Error evaluating {code}: {message}");
99+
100+
if !trace.is_empty() {
101+
msg = format!("{msg}\nR backtrace:\n{trace}");
102+
}
103+
104+
write!(f, "{msg}")
94105
},
95106

96107
Error::UnsafeEvaluationError(code) => {

crates/harp/src/eval.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ pub fn r_parse_eval(code: &str, options: RParseEvalOptions) -> Result<RObject> {
5959
return Err(Error::EvaluationError {
6060
code: code.to_string(),
6161
message: geterrmessage(),
62+
trace: String::from(""),
6263
});
6364
}
6465
}

crates/harp/src/exec.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ pub fn r_safe_eval(expr: RObject, env: RObject) -> crate::Result<RObject> {
120120

121121
return Err(Error::EvaluationError {
122122
code,
123-
message: message + "\nTrace:\n" + &trace,
123+
message,
124+
trace,
124125
});
125126
}
126127

@@ -689,7 +690,7 @@ mod tests {
689690

690691
assert_match!(result, Err(err) => {
691692
let msg = format!("{err}");
692-
let re = regex::Regex::new("Trace:\n(.|\n)*1L [+] \"\"").unwrap();
693+
let re = regex::Regex::new("R backtrace:\n(.|\n)*1L [+] \"\"").unwrap();
693694
assert!(re.is_match(&msg));
694695
});
695696
}

0 commit comments

Comments
 (0)