1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
use crate::linter::{Rule, RuleResult}; use sv_parser::{unwrap_locate, unwrap_node, NodeEvent, RefNode, SyntaxTree}; #[derive(Default)] pub struct ParameterInPackage; impl Rule for ParameterInPackage { fn check(&mut self, _syntax_tree: &SyntaxTree, event: &NodeEvent) -> RuleResult { let node = match event { NodeEvent::Enter(x) => x, NodeEvent::Leave(_) => { return RuleResult::Pass; } }; match node { RefNode::PackageDeclaration(x) => { let param = unwrap_node!(*x, ParameterDeclaration); if let Some(param) = param { let param_locate = unwrap_locate!(param).unwrap(); RuleResult::FailLocate(*param_locate) } else { RuleResult::Pass } } _ => RuleResult::Pass, } } fn name(&self) -> String { String::from("parameter_in_package") } fn hint(&self) -> String { String::from("`parameter` must be replaced to `localparam` in `package`") } fn reason(&self) -> String { String::from("some tools can't take `parameter` in `package`") } }