feat: added a twist
This commit is contained in:
45
backend/uframe/errors.py
Normal file
45
backend/uframe/errors.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""µFrame error types with source location tracking."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
class UFrameError(Exception):
|
||||
"""Base error for all µFrame operations."""
|
||||
|
||||
def __init__(self, message: str, line: int | None = None, col: int | None = None):
|
||||
self.line = line
|
||||
self.col = col
|
||||
loc = ""
|
||||
if line is not None:
|
||||
loc = f" (line {line}"
|
||||
if col is not None:
|
||||
loc += f", col {col}"
|
||||
loc += ")"
|
||||
super().__init__(f"{message}{loc}")
|
||||
|
||||
|
||||
class ParseError(UFrameError):
|
||||
"""Raised when .uf source cannot be parsed."""
|
||||
pass
|
||||
|
||||
|
||||
class LayoutError(UFrameError):
|
||||
"""Raised when layout constraints cannot be satisfied."""
|
||||
pass
|
||||
|
||||
|
||||
class CompileWarning:
|
||||
"""Non-fatal issue discovered during compilation."""
|
||||
|
||||
__slots__ = ("message", "line", "col")
|
||||
|
||||
def __init__(self, message: str, line: int | None = None, col: int | None = None):
|
||||
self.message = message
|
||||
self.line = line
|
||||
self.col = col
|
||||
|
||||
def __repr__(self) -> str:
|
||||
loc = ""
|
||||
if self.line is not None:
|
||||
loc = f" line={self.line}"
|
||||
return f"CompileWarning({self.message!r}{loc})"
|
||||
Reference in New Issue
Block a user