SF.net SVN: docutils:[10046 ] trunk
aa-turner--- via Docutils-checkins <[email protected]> Sun, 09 Mar 2025 01:45:29 +0000
| Newsgroups | gmane.text.docutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision: 10046
http://sourceforge.net/p/docutils/code/10046
Author: aa-turner
Date: 2025-03-09 01:45:28 +0000 (Sun, 09 Mar 2025)
Log Message:
-----------
Introduce a private typing utility module
This eliminates all first-party runtime imports of the typing module,
and centralises version checks for new features (such as TypeAlias)
in one place.
Modified Paths:
--------------
trunk/.flake8
trunk/docutils/.ruff.toml
trunk/docutils/docutils/languages/__init__.py
trunk/docutils/docutils/nodes.py
trunk/docutils/docutils/parsers/rst/languages/__init__.py
trunk/docutils/docutils/utils/__init__.py
trunk/docutils/test/alltests.py
Added Paths:
-----------
trunk/docutils/docutils/utils/_typing.py
Modified: trunk/.flake8
===================================================================
--- trunk/.flake8 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/.flake8 2025-03-09 01:45:28 UTC (rev 10046)
@@ -27,6 +27,10 @@
# whitespace around the operators with the lowest priority(ies).
# Use your own judgment; …"
+ F811,
+ # F811: "redefinition of unused '…' from line …"
+ # flake8 does not recognise ``@overload`` from any name other than 'typing'.
+
W503,
# W503: "line break before binary operator"
# this is the recommended style (changed on April 16th, 2016)
Modified: trunk/docutils/.ruff.toml
===================================================================
--- trunk/docutils/.ruff.toml 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/.ruff.toml 2025-03-09 01:45:28 UTC (rev 10046)
@@ -4,6 +4,8 @@
[lint]
preview = true
+typing-modules = ["docutils.utils._typing"]
+
select = [
"A", # flake8-builtins
"C4", # flake8-comprehensions
Modified: trunk/docutils/docutils/languages/__init__.py
===================================================================
--- trunk/docutils/docutils/languages/__init__.py 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/docutils/languages/__init__.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -14,7 +14,6 @@
__docformat__ = 'reStructuredText'
from importlib import import_module
-from typing import overload
from docutils.utils import normalize_language_tag
@@ -21,7 +20,7 @@
TYPE_CHECKING = False
if TYPE_CHECKING:
import types
- from typing import NoReturn, Protocol, TypeVar
+ from typing import NoReturn, Protocol, TypeVar, overload
from docutils.utils import Reporter
@@ -33,6 +32,8 @@
author_separators: list[str]
LanguageModuleT = TypeVar('LanguageModuleT')
+else:
+ from docutils.utils._typing import overload
class LanguageImporter:
Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/docutils/nodes.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -41,11 +41,9 @@
Mapping, Sequence)
from types import ModuleType
from typing import Any, ClassVar, Final, Literal, Self, SupportsIndex
- if sys.version_info[:2] >= (3, 12):
- from typing import TypeAlias
- else:
- from typing_extensions import TypeAlias
+ from docutils.utils._typing import TypeAlias
+
from xml.dom import minidom
from docutils.frontend import Values
Modified: trunk/docutils/docutils/parsers/rst/languages/__init__.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/languages/__init__.py 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/docutils/parsers/rst/languages/__init__.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -14,14 +14,12 @@
__docformat__ = 'reStructuredText'
-from typing import overload
-
from docutils.languages import LanguageImporter
TYPE_CHECKING = False
if TYPE_CHECKING:
import types
- from typing import NoReturn, Protocol
+ from typing import NoReturn, Protocol, overload
class RSTLanguageModule(Protocol):
__name__: str
@@ -28,6 +26,8 @@
directives: dict[str, str]
roles: dict[str, str]
+else:
+ from docutils.utils._typing import overload
class RstLanguageImporter(LanguageImporter):
Modified: trunk/docutils/docutils/utils/__init__.py
===================================================================
--- trunk/docutils/docutils/utils/__init__.py 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/docutils/utils/__init__.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -28,11 +28,9 @@
if TYPE_CHECKING:
from collections.abc import Callable, Sequence, Iterable
from typing import Any, Final, Literal, TextIO
- if sys.version_info[:2] >= (3, 12):
- from typing import TypeAlias
- else:
- from typing_extensions import TypeAlias
+ from docutils.utils._typing import TypeAlias
+
from docutils.nodes import StrPath
from docutils.frontend import Values
Added: trunk/docutils/docutils/utils/_typing.py
===================================================================
--- trunk/docutils/docutils/utils/_typing.py (rev 0)
+++ trunk/docutils/docutils/utils/_typing.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -0,0 +1,29 @@
+# Copyright: This module has been placed in the public domain.
+# Author: Adam Turner
+
+"""Private helpers for the ``typing`` module."""
+
+from __future__ import annotations
+
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+ import sys
+ from collections.abc import Callable
+ from typing import Any, Final, TypeVar, overload
+
+ if sys.version_info[:2] >= (3, 12):
+ from typing import TypeAlias
+ else:
+ from typing_extensions import TypeAlias # NoQA: F401
+
+ _F = TypeVar("_F", bound=Callable[..., Any])
+else:
+
+ def _overload_inner(*args, **kwds):
+ raise NotImplementedError
+
+ # Runtime replacement for ``typing.overload``.
+ def overload(func: _F) -> _F:
+ return _overload_inner
+
+__all__: Final = ('overload',)
Modified: trunk/docutils/test/alltests.py
===================================================================
--- trunk/docutils/test/alltests.py 2025-03-09 01:02:23 UTC (rev 10045)
+++ trunk/docutils/test/alltests.py 2025-03-09 01:45:28 UTC (rev 10046)
@@ -33,7 +33,7 @@
from typing import TextIO
from unittest.case import TestCase
- from typing_extensions import TypeAlias
+ from docutils.utils._typing import TypeAlias
ErrorTriple: TypeAlias = tuple[
type[BaseException],
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
_______________________________________________
Docutils-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/docutils-checkins