gh-113317, AC: Move warn() and fail() to libclinic.errors (#116770)
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 893f4cc..4c7c4dc 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -44,14 +44,13 @@
Protocol,
TypeVar,
cast,
- overload,
)
# Local imports.
import libclinic
import libclinic.cpp
-from libclinic import ClinicError
+from libclinic import ClinicError, fail, warn
# TODO:
@@ -94,51 +93,6 @@ def __repr__(self) -> str:
TemplateDict = dict[str, str]
-@overload
-def warn_or_fail(
- *args: object,
- fail: Literal[True],
- filename: str | None = None,
- line_number: int | None = None,
-) -> NoReturn: ...
-
-@overload
-def warn_or_fail(
- *args: object,
- fail: Literal[False] = False,
- filename: str | None = None,
- line_number: int | None = None,
-) -> None: ...
-
-def warn_or_fail(
- *args: object,
- fail: bool = False,
- filename: str | None = None,
- line_number: int | None = None,
-) -> None:
- joined = " ".join([str(a) for a in args])
- error = ClinicError(joined, filename=filename, lineno=line_number)
- if fail:
- raise error
- else:
- print(error.report(warn_only=True))
-
-
-def warn(
- *args: object,
- filename: str | None = None,
- line_number: int | None = None,
-) -> None:
- return warn_or_fail(*args, filename=filename, line_number=line_number, fail=False)
-
-def fail(
- *args: object,
- filename: str | None = None,
- line_number: int | None = None,
-) -> NoReturn:
- warn_or_fail(*args, filename=filename, line_number=line_number, fail=True)
-
-
class CRenderData:
def __init__(self) -> None:
diff --git a/Tools/clinic/libclinic/__init__.py b/Tools/clinic/libclinic/__init__.py
index 738864a..8efaad6 100644
--- a/Tools/clinic/libclinic/__init__.py
+++ b/Tools/clinic/libclinic/__init__.py
@@ -2,6 +2,8 @@
from .errors import (
ClinicError,
+ warn,
+ fail,
)
from .formatting import (
SIG_END_MARKER,
@@ -32,6 +34,8 @@
__all__ = [
# Error handling
"ClinicError",
+ "warn",
+ "fail",
# Formatting helpers
"SIG_END_MARKER",
diff --git a/Tools/clinic/libclinic/errors.py b/Tools/clinic/libclinic/errors.py
index afb21b0..f06bdfb 100644
--- a/Tools/clinic/libclinic/errors.py
+++ b/Tools/clinic/libclinic/errors.py
@@ -1,4 +1,5 @@
import dataclasses as dc
+from typing import Literal, NoReturn, overload
@dc.dataclass
@@ -24,3 +25,48 @@ def report(self, *, warn_only: bool = False) -> str:
class ParseError(ClinicError):
pass
+
+
+@overload
+def warn_or_fail(
+ *args: object,
+ fail: Literal[True],
+ filename: str | None = None,
+ line_number: int | None = None,
+) -> NoReturn: ...
+
+@overload
+def warn_or_fail(
+ *args: object,
+ fail: Literal[False] = False,
+ filename: str | None = None,
+ line_number: int | None = None,
+) -> None: ...
+
+def warn_or_fail(
+ *args: object,
+ fail: bool = False,
+ filename: str | None = None,
+ line_number: int | None = None,
+) -> None:
+ joined = " ".join([str(a) for a in args])
+ error = ClinicError(joined, filename=filename, lineno=line_number)
+ if fail:
+ raise error
+ else:
+ print(error.report(warn_only=True))
+
+
+def warn(
+ *args: object,
+ filename: str | None = None,
+ line_number: int | None = None,
+) -> None:
+ return warn_or_fail(*args, filename=filename, line_number=line_number, fail=False)
+
+def fail(
+ *args: object,
+ filename: str | None = None,
+ line_number: int | None = None,
+) -> NoReturn:
+ warn_or_fail(*args, filename=filename, line_number=line_number, fail=True)