| import dataclasses as dc |
| |
| |
| @dc.dataclass |
| class ClinicError(Exception): |
| message: str |
| _: dc.KW_ONLY |
| lineno: int | None = None |
| filename: str | None = None |
| |
| def __post_init__(self) -> None: |
| super().__init__(self.message) |
| |
| def report(self, *, warn_only: bool = False) -> str: |
| msg = "Warning" if warn_only else "Error" |
| if self.filename is not None: |
| msg += f" in file {self.filename!r}" |
| if self.lineno is not None: |
| msg += f" on line {self.lineno}" |
| msg += ":\n" |
| msg += f"{self.message}\n" |
| return msg |
| |
| |
| class ParseError(ClinicError): |
| pass |