Files
2026-02-01 03:56:22 +00:00

61 lines
1.7 KiB
Python

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