use alloc::{boxed::Box, vec, vec::Vec};
use super::{
AccessibilityRule, EncodingRule, InvalidColorRule, InvalidTagRule, MissingStyleRule,
NegativeDurationRule, PerformanceRule, TimingOverlapRule,
};
use crate::analysis::linting::{IssueCategory, LintRule};
pub struct BuiltinRules;
impl BuiltinRules {
#[must_use]
pub fn all_rules() -> Vec<Box<dyn LintRule>> {
vec![
Box::new(TimingOverlapRule),
Box::new(NegativeDurationRule),
Box::new(InvalidColorRule),
Box::new(MissingStyleRule),
Box::new(InvalidTagRule),
Box::new(PerformanceRule),
Box::new(EncodingRule),
Box::new(AccessibilityRule),
]
}
#[must_use]
pub fn rules_for_category(category: IssueCategory) -> Vec<Box<dyn LintRule>> {
Self::all_rules()
.into_iter()
.filter(|rule| rule.category() == category)
.collect()
}
#[must_use]
pub fn rule_by_id(id: &str) -> Option<Box<dyn LintRule>> {
Self::all_rules().into_iter().find(|rule| rule.id() == id)
}
#[must_use]
pub fn all_rule_ids() -> Vec<&'static str> {
Self::all_rules().iter().map(|rule| rule.id()).collect()
}
}