code_baseline/rules/
factory.rs1#[cfg(feature = "ast")]
2use crate::rules::ast;
3use crate::config::RuleConfig;
4use crate::rules::banned_dependency::BannedDependencyRule;
5use crate::rules::banned_import::BannedImportRule;
6use crate::rules::banned_pattern::BannedPatternRule;
7use crate::rules::file_presence::FilePresenceRule;
8use crate::rules::ratchet::RatchetRule;
9use crate::rules::required_pattern::RequiredPatternRule;
10use crate::rules::tailwind_dark_mode::TailwindDarkModeRule;
11use crate::rules::tailwind_theme_tokens::TailwindThemeTokensRule;
12use crate::rules::window_pattern::WindowPatternRule;
13use crate::rules::{Rule, RuleBuildError};
14use std::fmt;
15
16#[derive(Debug)]
17pub enum FactoryError {
18 UnknownRuleType(String),
19 BuildError(RuleBuildError),
20}
21
22impl fmt::Display for FactoryError {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match self {
25 FactoryError::UnknownRuleType(t) => write!(f, "unknown rule type: '{}'", t),
26 FactoryError::BuildError(e) => write!(f, "{}", e),
27 }
28 }
29}
30
31impl std::error::Error for FactoryError {}
32
33impl From<RuleBuildError> for FactoryError {
34 fn from(e: RuleBuildError) -> Self {
35 FactoryError::BuildError(e)
36 }
37}
38
39pub fn build_rule(rule_type: &str, config: &RuleConfig) -> Result<Box<dyn Rule>, FactoryError> {
41 match rule_type {
42 "tailwind-dark-mode" => Ok(Box::new(TailwindDarkModeRule::new(config)?)),
43 "tailwind-theme-tokens" => Ok(Box::new(TailwindThemeTokensRule::new(config)?)),
44 "ratchet" => Ok(Box::new(RatchetRule::new(config)?)),
45 "banned-pattern" => Ok(Box::new(BannedPatternRule::new(config)?)),
46 "banned-import" => Ok(Box::new(BannedImportRule::new(config)?)),
47 "banned-dependency" => Ok(Box::new(BannedDependencyRule::new(config)?)),
48 "required-pattern" => Ok(Box::new(RequiredPatternRule::new(config)?)),
49 "file-presence" => Ok(Box::new(FilePresenceRule::new(config)?)),
50 "window-pattern" => Ok(Box::new(WindowPatternRule::new(config)?)),
51 #[cfg(feature = "ast")]
52 "max-component-size" => Ok(Box::new(ast::MaxComponentSizeRule::new(config)?)),
53 #[cfg(feature = "ast")]
54 "no-nested-components" => Ok(Box::new(ast::NoNestedComponentsRule::new(config)?)),
55 #[cfg(feature = "ast")]
56 "prefer-use-reducer" => Ok(Box::new(ast::PreferUseReducerRule::new(config)?)),
57 #[cfg(feature = "ast")]
58 "no-cascading-set-state" => Ok(Box::new(ast::NoCascadingSetStateRule::new(config)?)),
59 #[cfg(feature = "ast")]
60 "require-img-alt" => Ok(Box::new(ast::RequireImgAltRule::new(config)?)),
61 _ => Err(FactoryError::UnknownRuleType(rule_type.to_string())),
62 }
63}