]> git.huck.website - metaforge.git/commitdiff
refactored: added filename to parser errors
authorHuck Boles <huck@huck.website>
Wed, 24 May 2023 01:56:12 +0000 (20:56 -0500)
committerHuck Boles <huck@huck.website>
Wed, 24 May 2023 01:56:12 +0000 (20:56 -0500)
src/error.rs
src/metafile/file.rs

index c11f25b5ef202d5884ed8caf4ee3462256c1dad0..4f82158e330a95afcb30157a38418b41b87a29c0 100644 (file)
@@ -1,4 +1,3 @@
-use crate::Rule;
 use thiserror::Error;
 
 #[derive(Error, Debug)]
@@ -25,13 +24,13 @@ pub enum MetaError {
     UndefinedDefault { pattern: String, path: String },
     #[error("the parser cannot resolve this input: {input}")]
     UnreachableRule { input: String },
+    #[error("{file}\n{error}")]
+    ParserError { file: String, error: String },
     #[error(transparent)]
     MetaError(#[from] Box<MetaError>),
     #[error(transparent)]
     PandocError(#[from] pandoc::PandocError),
     #[error(transparent)]
-    ParserError(#[from] pest::error::Error<Rule>),
-    #[error(transparent)]
     Other(#[from] eyre::Error),
 }
 
index 7f8e70a6c17a0d0f61acae781cfe179233057c2e..b664b0941fc39e782ce8bb5cd3e7997dc8adb442 100644 (file)
@@ -45,7 +45,10 @@ impl<'a> MetaFile<'a> {
             }
         };
 
-        let mut metafile = parse_string(str, opts).map_err(MetaError::from)?;
+        let mut metafile = parse_string(str, opts).map_err(|e| MetaError::ParserError {
+            file: path.to_string_lossy().to_string(),
+            error: e.to_string(),
+        })?;
 
         metafile.path = path;
         Ok(metafile)
@@ -63,7 +66,10 @@ impl<'a> MetaFile<'a> {
         let html = self.to_html().map_err(MetaError::from)?;
 
         let pattern = self.get_pattern("base").map_err(MetaError::from)?;
-        let mut base = crate::parse_string(pattern, self.opts).map_err(MetaError::from)?;
+        let mut base = parse_string(pattern, self.opts).map_err(|e| MetaError::ParserError {
+            file: self.path.to_string_lossy().to_string(),
+            error: e.to_string(),
+        })?;
 
         base.merge(self);
         base.patterns.insert(Scope::into_global("SOURCE"), html);