diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-08-14 19:57:09 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-08-14 19:57:09 +0900 |
commit | d3af1cde2bcdfc048cd53a67f7fbfe05aa106ee3 (patch) | |
tree | ef6be5d181632acd46489b0529dc3017cb4c7074 | |
parent | b2d524d2b23e142fd91c39d862fa04eb4acc3b22 (diff) | |
parent | 359794281065646a81f2fb3d3a7086681c61e12d (diff) | |
download | sphinx-git-d3af1cde2bcdfc048cd53a67f7fbfe05aa106ee3.tar.gz |
Merge tag 'v3.2.1' into 3.x
-rw-r--r-- | CHANGES | 17 | ||||
-rw-r--r-- | sphinx/__init__.py | 6 | ||||
-rw-r--r-- | sphinx/ext/autodoc/__init__.py | 6 | ||||
-rw-r--r-- | tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py | 8 | ||||
-rw-r--r-- | tests/test_ext_autodoc.py | 22 |
5 files changed, 42 insertions, 17 deletions
@@ -23,17 +23,8 @@ Bugs fixed Testing -------- -Release 3.2.1 (in development) -============================== - -Dependencies ------------- - -Incompatible changes --------------------- - -Deprecated ----------- +Release 3.2.1 (released Aug 14, 2020) +===================================== Features added -------------- @@ -52,11 +43,9 @@ Bugs fixed class * #8091: autodoc: AttributeError is raised on documenting an attribute on Python 3.5.2 +* #8099: autodoc: NameError is raised when target code uses ``TYPE_CHECKING`` * C++, fix parsing of template template paramters, broken by the fix of #7944 -Testing --------- - Release 3.2.0 (released Aug 08, 2020) ===================================== diff --git a/sphinx/__init__.py b/sphinx/__init__.py index fde2345a8..1f550419f 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -32,8 +32,8 @@ if 'PYTHONWARNINGS' not in os.environ: warnings.filterwarnings('ignore', "'U' mode is deprecated", DeprecationWarning, module='docutils.io') -__version__ = '3.3.0+' -__released__ = '3.3.0' # used when Sphinx builds its own docs +__version__ = '3.2.1' +__released__ = '3.2.1' # used when Sphinx builds its own docs #: Version info for better programmatic use. #: @@ -43,7 +43,7 @@ __released__ = '3.3.0' # used when Sphinx builds its own docs #: #: .. versionadded:: 1.2 #: Before version 1.2, check the string ``sphinx.__version__``. -version_info = (3, 3, 0, 'beta', 0) +version_info = (3, 2, 1, 'final', 0) package_dir = path.abspath(path.dirname(__file__)) diff --git a/sphinx/ext/autodoc/__init__.py b/sphinx/ext/autodoc/__init__.py index f3820f715..b61a96c84 100644 --- a/sphinx/ext/autodoc/__init__.py +++ b/sphinx/ext/autodoc/__init__.py @@ -1608,6 +1608,9 @@ class DataDocumenter(ModuleLevelDocumenter): # obtain annotation for this data try: annotations = get_type_hints(self.parent) + except NameError: + # Failed to evaluate ForwardRef (maybe TYPE_CHECKING) + annotations = safe_getattr(self.parent, '__annotations__', {}) except TypeError: annotations = {} except KeyError: @@ -1984,6 +1987,9 @@ class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): # obtain type annotation for this attribute try: annotations = get_type_hints(self.parent) + except NameError: + # Failed to evaluate ForwardRef (maybe TYPE_CHECKING) + annotations = safe_getattr(self.parent, '__annotations__', {}) except TypeError: annotations = {} except KeyError: diff --git a/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py b/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py new file mode 100644 index 000000000..aa7eb99a6 --- /dev/null +++ b/tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py @@ -0,0 +1,8 @@ +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from io import StringIO + + +class Foo: + attr1: "StringIO" diff --git a/tests/test_ext_autodoc.py b/tests/test_ext_autodoc.py index 15e1f3539..90a2ec95a 100644 --- a/tests/test_ext_autodoc.py +++ b/tests/test_ext_autodoc.py @@ -1740,6 +1740,28 @@ def test_autodoc_Annotated(app): ] +@pytest.mark.skipif(sys.version_info < (3, 6), reason='py36+ is required.') +@pytest.mark.sphinx('html', testroot='ext-autodoc') +def test_autodoc_TYPE_CHECKING(app): + options = {"members": None, + "undoc-members": None} + actual = do_autodoc(app, 'module', 'target.TYPE_CHECKING', options) + assert list(actual) == [ + '', + '.. py:module:: target.TYPE_CHECKING', + '', + '', + '.. py:class:: Foo()', + ' :module: target.TYPE_CHECKING', + '', + '', + ' .. py:attribute:: Foo.attr1', + ' :module: target.TYPE_CHECKING', + ' :type: StringIO', + '', + ] + + @pytest.mark.sphinx('html', testroot='pycode-egg') def test_autodoc_for_egged_code(app): options = {"members": None, |