Initial upload: ErrorFix CLI with rule engine and pattern matching
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
This commit is contained in:
60
errorfix/rules/rule.py
Normal file
60
errorfix/rules/rule.py
Normal file
@@ -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', {}),
|
||||
)
|
||||
Reference in New Issue
Block a user