From ca982dfc02ea6dc9aefdd1b61ef33ac26f3b6ba0 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Wed, 15 Aug 2018 18:37:31 -0500 Subject: [PATCH] BUGFIX: Error message for parse errors reported wrong file name. --- examples/test.ucg | 2 +- src/build/mod.rs | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/examples/test.ucg b/examples/test.ucg index a509c5a..d3ded9a 100644 --- a/examples/test.ucg +++ b/examples/test.ucg @@ -41,4 +41,4 @@ let server_config = { l = ["foo", "bar"] }; -out json server_config; \ No newline at end of file +out "json" server_config; \ No newline at end of file diff --git a/src/build/mod.rs b/src/build/mod.rs index 18d4fff..0836304 100644 --- a/src/build/mod.rs +++ b/src/build/mod.rs @@ -298,8 +298,9 @@ pub struct AssertCollector { } /// Builder handles building ucg code for a single file.. -pub struct Builder { +pub struct Builder<'a> { root: PathBuf, + curr_file: Option<&'a str>, validate_mode: bool, assert_collector: AssertCollector, env: Rc, @@ -339,7 +340,7 @@ macro_rules! eval_binary_expr { }; } -impl Builder { +impl<'a> Builder<'a> { // TOOD(jwall): This needs some unit tests. fn tuple_to_val(&self, fields: &Vec<(Token, Expression)>) -> Result, Box> { let mut new_fields = Vec::<(Positioned, Rc)>::new(); @@ -409,6 +410,7 @@ impl Builder { ) -> Self { Builder { root: root.into(), + curr_file: None, validate_mode: false, assert_collector: AssertCollector { success: true, @@ -463,7 +465,10 @@ impl Builder { } } Err(err) => Err(Box::new(error::Error::new_with_cause( - format!("Error while parsing file: {}", self.root.to_string_lossy()), + format!( + "Error while parsing file: {}", + self.curr_file.unwrap_or("") + ), error::ErrorType::ParseError, err, ))), @@ -471,8 +476,9 @@ impl Builder { } /// Builds a ucg file at the named path. - pub fn build_file(&mut self, name: &str) -> BuildResult { + pub fn build_file(&mut self, name: &'a str) -> BuildResult { eprintln!("building ucg file {}", name); + self.curr_file = Some(name); let mut f = try!(File::open(name)); let mut s = String::new(); try!(f.read_to_string(&mut s));