-use crate::Rule;
use thiserror::Error;
#[derive(Error, Debug)]
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),
}
}
};
- 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)
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);