diff --git a/Cargo.toml b/Cargo.toml index 037b04a..81e84d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,6 @@ crate-type = ["cdylib"] [dependencies] #svlint = { path = "../svlint" } -svlint = "0.8.0" +svlint = "0.9.0" sv-parser = "0.13.1" regex = "1" # Only used for the rule "forbidden_regex". diff --git a/src/forbidden_regex.rs b/src/forbidden_regex.rs index b4ac176..349af3c 100644 --- a/src/forbidden_regex.rs +++ b/src/forbidden_regex.rs @@ -1,5 +1,5 @@ use svlint::config::ConfigOption; -use svlint::linter::{TextRule, TextRuleResult}; +use svlint::linter::{TextRule, TextRuleEvent, TextRuleResult}; use regex::Regex; #[derive(Default)] @@ -10,9 +10,16 @@ pub struct ForbiddenRegex { impl TextRule for ForbiddenRegex { fn check( &mut self, - line: &str, + event: TextRuleEvent, _option: &ConfigOption, ) -> TextRuleResult { + let line: &str = match event { + TextRuleEvent::StartOfFile => { + return TextRuleResult::Pass; + } + TextRuleEvent::Line(x) => x, + }; + if self.re.is_none() { let r = format!(r"XXX"); self.re = Some(Regex::new(&r).unwrap()); diff --git a/src/lib.rs b/src/lib.rs index ea640ae..bf97cca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,7 +30,7 @@ mod tests { use std::fs::read_to_string; use std::path::{Path, PathBuf}; use svlint::config::Config; - use svlint::linter::Linter; + use svlint::linter::{Linter, TextRuleEvent}; use sv_parser::parse_sv_str; fn so_path() -> String { @@ -77,12 +77,16 @@ mod tests { let mut pass = true; + // Signal beginning of file to all TextRules, which *may* be used + // by textrules to reset their internal state. + let _ = linter.textrules_check(TextRuleEvent::StartOfFile, &sv, &0); + // Iterate over lines in the file, applying each textrule to each // line in turn. let text: String = read_to_string(&sv).unwrap(); let mut beg: usize = 0; for line in text.lines() { - for _failed in linter.textrules_check(&line, &sv, &beg) { + for _failed in linter.textrules_check(TextRuleEvent::Line(&line), &sv, &beg) { pass = false; }