diff --git a/vibeguard/patterns/definitions.py b/vibeguard/patterns/definitions.py new file mode 100644 index 0000000..4d7fc9f --- /dev/null +++ b/vibeguard/patterns/definitions.py @@ -0,0 +1,64 @@ +"""Pattern definitions for VibeGuard.""" + +from dataclasses import dataclass, field +from enum import Enum +from typing import Any + + +class Severity(Enum): + """Severity levels for detected issues.""" + + CRITICAL = "critical" + ERROR = "error" + WARNING = "warning" + INFO = "info" + + +@dataclass +class Pattern: + """Definition of an anti-pattern.""" + + id: str + name: str + description: str + severity: Severity + languages: list[str] + message: str + suggestion: str + query: str = "" + before_example: str = "" + after_example: str = "" + category: str = "general" + + +@dataclass +class Issue: + """A detected issue in the code.""" + + pattern_id: str + file: str + line: int + severity: Severity + message: str + suggestion: str + language: str = "" + column: int = 0 + end_line: int = 0 + end_column: int = 0 + code_snippet: str = "" + + def to_dict(self) -> dict[str, Any]: + """Convert issue to dictionary.""" + return { + "pattern": self.pattern_id, + "file": self.file, + "line": self.line, + "severity": self.severity.value, + "message": self.message, + "suggestion": self.suggestion, + "language": self.language, + "column": self.column, + "end_line": self.end_line, + "end_column": self.end_column, + "code_snippet": self.code_snippet, + }