summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2020-08-14 19:57:09 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2020-08-14 19:57:09 +0900
commitd3af1cde2bcdfc048cd53a67f7fbfe05aa106ee3 (patch)
treeef6be5d181632acd46489b0529dc3017cb4c7074
parentb2d524d2b23e142fd91c39d862fa04eb4acc3b22 (diff)
parent359794281065646a81f2fb3d3a7086681c61e12d (diff)
downloadsphinx-git-d3af1cde2bcdfc048cd53a67f7fbfe05aa106ee3.tar.gz
Merge tag 'v3.2.1' into 3.x
-rw-r--r--CHANGES17
-rw-r--r--sphinx/__init__.py6
-rw-r--r--sphinx/ext/autodoc/__init__.py6
-rw-r--r--tests/roots/test-ext-autodoc/target/TYPE_CHECKING.py8
-rw-r--r--tests/test_ext_autodoc.py22
5 files changed, 42 insertions, 17 deletions
diff --git a/CHANGES b/CHANGES
index 4c6e4e38d..e068438cd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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,