From f9e93d18bd9bb104a7bd47e4d4438b407d7a27e3 Mon Sep 17 00:00:00 2001 From: damc Date: Wed, 26 Oct 2022 19:43:23 +0200 Subject: [PATCH] ppErrorPreprocess Make use of the existing Error::Preprocess Before this commit, inputs with invalid pp syntax are reported using `Error::Parse` which is also used to report invalid post-pp syntax. In svlint/svls, `Error::Parse` is reported to the user as "parse error" without specifying if that's pre or post pp. This commit makes it possible for future versions of svlint/svls to report "preprocess error", thus helping users to identify pp issues. - `Error::Preprocess` appears to be defined but unused. - Add the argument `Option<(PathBuf, usize)>` to `Error::Preprocess`, same as `Error::Parse`. - Update `preprocess_str()` to use `Error::Preprocess` in all 5 instances. --- sv-parser-error/src/lib.rs | 13 +++++++++++-- sv-parser-pp/src/preprocess.rs | 10 +++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/sv-parser-error/src/lib.rs b/sv-parser-error/src/lib.rs index 96ca1dd..d6f3ccf 100644 --- a/sv-parser-error/src/lib.rs +++ b/sv-parser-error/src/lib.rs @@ -7,29 +7,38 @@ use thiserror::Error; pub enum Error { #[error("IO error: {0}")] Io(#[from] std::io::Error), + #[error("File error: {path:?}")] File { #[source] source: std::io::Error, path: PathBuf, }, + #[error("Include error")] Include { #[from] source: Box, }, + #[error("Parse error: {0:?}")] Parse(Option<(PathBuf, usize)>), - #[error("Preprocess error")] - Preprocess, + + #[error("Preprocess error: {0:?}")] + Preprocess(Option<(PathBuf, usize)>), + #[error("Define argument not found: {0}")] DefineArgNotFound(String), + #[error("Define not found: {0}")] DefineNotFound(String), + #[error("Define must have argument")] DefineNoArgs, + #[error("Exceed recursive limit")] ExceedRecursiveLimit, + #[error("Include line can't have other items")] IncludeLine, } diff --git a/sv-parser-pp/src/preprocess.rs b/sv-parser-pp/src/preprocess.rs index 0093903..82bfb7c 100644 --- a/sv-parser-pp/src/preprocess.rs +++ b/sv-parser-pp/src/preprocess.rs @@ -226,19 +226,19 @@ pub fn preprocess_str, U: AsRef, V: BuildHasher>( let span = Span::new_extra(&s, SpanInfo::default()); let (_, pp_text) = all_consuming(pp_parser)(span).map_err(|x| match x { - nom::Err::Incomplete(_) => Error::Parse(None), + nom::Err::Incomplete(_) => Error::Preprocess(None), nom::Err::Error(e) => { if let Some(pos) = error_position(&e) { - Error::Parse(Some((PathBuf::from(path.as_ref()), pos))) + Error::Preprocess(Some((PathBuf::from(path.as_ref()), pos))) } else { - Error::Parse(None) + Error::Preprocess(None) } } nom::Err::Failure(e) => { if let Some(pos) = error_position(&e) { - Error::Parse(Some((PathBuf::from(path.as_ref()), pos))) + Error::Preprocess(Some((PathBuf::from(path.as_ref()), pos))) } else { - Error::Parse(None) + Error::Preprocess(None) } } })?;