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', {}), )