From 3492d491fe09701a035715bb1dbaba13734ad69c Mon Sep 17 00:00:00 2001 From: Pablo Aguilar Date: Tue, 18 Jan 2022 14:37:39 -0300 Subject: [PATCH] Prevents reaching inner blocks that contains `if TYPE_CHECKING` (#211) --- CHANGELOG.md | 4 ++++ src/sphinx_autodoc_typehints/__init__.py | 2 +- .../roots/test-resolve-typing-guard/demo_typing_guard.py | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a1e3de5..5237d3b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.15.3 + +- Prevents reaching inner blocks that contains `if TYPE_CHECKING` + ## 1.15.2 - Log a warning instead of crashing when a type guard import fails to resolve diff --git a/src/sphinx_autodoc_typehints/__init__.py b/src/sphinx_autodoc_typehints/__init__.py index d973331a..0876ca74 100644 --- a/src/sphinx_autodoc_typehints/__init__.py +++ b/src/sphinx_autodoc_typehints/__init__.py @@ -271,7 +271,7 @@ def get_all_type_hints(obj: Any, name: str) -> dict[str, Any]: return _get_type_hint(name, obj) -_TYPE_GUARD_IMPORT_RE = re.compile(r"if (typing.)?TYPE_CHECKING:[^\n]*([\s\S]*?)(?=\n\S)") +_TYPE_GUARD_IMPORT_RE = re.compile(r"\nif (typing.)?TYPE_CHECKING:[^\n]*([\s\S]*?)(?=\n\S)") _TYPE_GUARD_IMPORTS_RESOLVED = set() diff --git a/tests/roots/test-resolve-typing-guard/demo_typing_guard.py b/tests/roots/test-resolve-typing-guard/demo_typing_guard.py index 281de406..1399bf44 100644 --- a/tests/roots/test-resolve-typing-guard/demo_typing_guard.py +++ b/tests/roots/test-resolve-typing-guard/demo_typing_guard.py @@ -29,6 +29,15 @@ def a(f: Decimal, s: AnyStr) -> Sequence[AnyStr | Decimal]: return [f, s] +class SomeClass: + """This class do something.""" + + if TYPE_CHECKING: # Classes doesn't have `__globals__` attribute + + def __getattr__(self, item: str): # noqa: U100 + """This method do something.""" + + __all__ = [ "a", "ValueError",