pub mod standard;
pub mod mdbook001;
pub mod mdbook002;
pub mod mdbook003;
pub mod mdbook004;
use crate::{engine::RuleProvider, registry::RuleRegistry};
pub struct MdBookRuleProvider;
impl RuleProvider for MdBookRuleProvider {
fn provider_id(&self) -> &'static str {
"mdbook"
}
fn description(&self) -> &'static str {
"mdBook-specific linting rules for preprocessor functionality"
}
fn version(&self) -> &'static str {
env!("CARGO_PKG_VERSION")
}
fn register_rules(&self, registry: &mut RuleRegistry) {
registry.register(Box::new(mdbook001::MDBOOK001));
registry.register(Box::new(mdbook002::MDBOOK002));
registry.register(Box::new(mdbook003::MDBOOK003));
registry.register(Box::new(mdbook004::MDBOOK004));
}
fn rule_ids(&self) -> Vec<&'static str> {
vec!["MDBOOK001", "MDBOOK002", "MDBOOK003", "MDBOOK004"]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_mdbook_provider_metadata() {
let provider = MdBookRuleProvider;
assert_eq!(provider.provider_id(), "mdbook");
assert!(provider.description().contains("mdBook"));
assert!(!provider.version().is_empty());
}
#[test]
fn test_mdbook_provider_rule_count() {
let provider = MdBookRuleProvider;
let rule_ids = provider.rule_ids();
assert_eq!(rule_ids.len(), 4);
assert!(rule_ids.contains(&"MDBOOK001"));
assert!(rule_ids.contains(&"MDBOOK002"));
assert!(rule_ids.contains(&"MDBOOK003"));
assert!(rule_ids.contains(&"MDBOOK004"));
assert!(!rule_ids.contains(&"MD001"));
}
#[test]
fn test_mdbook_provider_registration() {
let mut registry = RuleRegistry::new();
let provider = MdBookRuleProvider;
assert_eq!(registry.len(), 0);
provider.register_rules(&mut registry);
assert_eq!(registry.len(), 4);
assert!(registry.get_rule("MDBOOK001").is_some());
assert!(registry.get_rule("MDBOOK002").is_some());
assert!(registry.get_rule("MDBOOK003").is_some());
assert!(registry.get_rule("MDBOOK004").is_some());
assert!(registry.get_rule("MD001").is_none());
}
}