diff --git a/errorfix/rules/rule.py b/errorfix/rules/rule.py new file mode 100644 index 0000000..414496c --- /dev/null +++ b/errorfix/rules/rule.py @@ -0,0 +1,60 @@ +from dataclasses import dataclass, field +from typing import Optional, List, Dict, Any +from enum import Enum + + +class Severity(str, Enum): + ERROR = "error" + WARNING = "warning" + INFO = "info" + SUGGESTION = "suggestion" + + +@dataclass +class Rule: + id: str + name: str + pattern: str + fix: str + description: str + severity: Severity = Severity.ERROR + language: Optional[str] = None + tool: Optional[str] = None + tags: List[str] = field(default_factory=list) + priority: int = 0 + metadata: Dict[str, Any] = field(default_factory=dict) + + def __post_init__(self): + if isinstance(self.severity, str): + self.severity = Severity(self.severity) + + def to_dict(self) -> Dict[str, Any]: + return { + 'id': self.id, + 'name': self.name, + 'pattern': self.pattern, + 'fix': self.fix, + 'description': self.description, + 'severity': self.severity.value if isinstance(self.severity, Severity) else self.severity, + 'language': self.language, + 'tool': self.tool, + 'tags': self.tags, + 'priority': self.priority, + 'metadata': self.metadata, + } + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> 'Rule': + return cls( + id=data.get('id', ''), + name=data.get('name', ''), + pattern=data.get('pattern', ''), + fix=data.get('fix', ''), + description=data.get('description', ''), + severity=data.get('severity', 'error'), + language=data.get('language'), + tool=data.get('tool'), + tags=data.get('tags', []), + priority=data.get('priority', 0), + metadata=data.get('metadata', {}), + )