Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-sphinx-autodoc-typehints for 
openSUSE:Factory checked in at 2021-08-03 22:48:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sphinx-autodoc-typehints (Old)
 and      /work/SRC/openSUSE:Factory/.python-sphinx-autodoc-typehints.new.1899 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-sphinx-autodoc-typehints"

Tue Aug  3 22:48:56 2021 rev:8 rq:909938 version:1.12.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-sphinx-autodoc-typehints/python-sphinx-autodoc-typehints.changes
  2021-04-24 23:10:14.183486717 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-sphinx-autodoc-typehints.new.1899/python-sphinx-autodoc-typehints.changes
        2021-08-03 22:49:28.816443347 +0200
@@ -1,0 +2,10 @@
+Tue Aug  3 09:42:00 UTC 2021 - Matej Cepl <mc...@suse.com>
+
+- Update to 1.12.0:
+  - Dropped Python 3.5 support
+  - Added the simplify_optional_unions config option
+  - Fixed indentation of multiline strings
+  - Changed formatting of None to point to the Python stdlib docs
+  - Updated special dataclass handling
+
+-------------------------------------------------------------------

Old:
----
  sphinx-autodoc-typehints-1.11.0.tar.gz

New:
----
  sphinx-autodoc-typehints-1.12.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-sphinx-autodoc-typehints.spec ++++++
--- /var/tmp/diff_new_pack.JEnhir/_old  2021-08-03 22:49:29.260442812 +0200
+++ /var/tmp/diff_new_pack.JEnhir/_new  2021-08-03 22:49:29.260442812 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-sphinx-autodoc-typehints
-Version:        1.11.0
+Version:        1.12.0
 Release:        0
 Summary:        Type hints (PEP 484) support for the Sphinx autodoc extension
 License:        MIT

++++++ python-sphinx-autodoc-typehints-system-object.inv.patch ++++++
--- /var/tmp/diff_new_pack.JEnhir/_old  2021-08-03 22:49:29.284442783 +0200
+++ /var/tmp/diff_new_pack.JEnhir/_new  2021-08-03 22:49:29.284442783 +0200
@@ -1,16 +1,10 @@
 ---
- tests/conftest.py |   13 ++-----------
- 1 file changed, 2 insertions(+), 11 deletions(-)
+ tests/conftest.py |   12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
 
 --- a/tests/conftest.py
 +++ b/tests/conftest.py
-@@ -1,5 +1,4 @@
- import os
--import sys
- import pathlib
- import shutil
- 
-@@ -13,16 +12,8 @@ collect_ignore = ['roots']
+@@ -14,16 +14,8 @@ collect_ignore = ['roots']
  
  @pytest.fixture(scope='session')
  def inv(pytestconfig):

++++++ sphinx-autodoc-typehints-1.11.0.tar.gz -> 
sphinx-autodoc-typehints-1.12.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/.github/ISSUE_TEMPLATE/bug_report.md 
new/sphinx-autodoc-typehints-1.12.0/.github/ISSUE_TEMPLATE/bug_report.md
--- old/sphinx-autodoc-typehints-1.11.0/.github/ISSUE_TEMPLATE/bug_report.md    
1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-autodoc-typehints-1.12.0/.github/ISSUE_TEMPLATE/bug_report.md    
2021-04-15 02:21:18.000000000 +0200
@@ -0,0 +1,21 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Please provide a **minimal** reproducible example that developers can run to 
investigate the problem.
+You can find help for creating such an example 
[here](https://stackoverflow.com/help/minimal-reproducible-example).
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Additional context**
+Add any other context about the problem here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/.github/ISSUE_TEMPLATE/feature_request.md 
new/sphinx-autodoc-typehints-1.12.0/.github/ISSUE_TEMPLATE/feature_request.md
--- 
old/sphinx-autodoc-typehints-1.11.0/.github/ISSUE_TEMPLATE/feature_request.md   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/sphinx-autodoc-typehints-1.12.0/.github/ISSUE_TEMPLATE/feature_request.md   
    2021-04-15 02:21:18.000000000 +0200
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always 
frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features 
you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/.github/workflows/codeqa-test.yml 
new/sphinx-autodoc-typehints-1.12.0/.github/workflows/codeqa-test.yml
--- old/sphinx-autodoc-typehints-1.11.0/.github/workflows/codeqa-test.yml       
1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-autodoc-typehints-1.12.0/.github/workflows/codeqa-test.yml       
2021-04-15 02:21:18.000000000 +0200
@@ -0,0 +1,68 @@
+name: Python codeqa/test
+
+on:
+  push:
+    branches: [master]
+  pull_request:
+
+jobs:
+  lint:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Python
+      uses: actions/setup-python@v2
+      with:
+        python-version: 3.x
+    - uses: actions/cache@v2
+      with:
+        path: ~/.cache/pip
+        key: pip-lint
+    - name: Install dependencies
+      run: pip install flake8 isort
+    - name: Run flake8
+      run: flake8 sphinx_autodoc_typehints.py tests
+    - name: Run isort
+      run: isort -c sphinx_autodoc_typehints.py tests
+
+  test:
+    needs: [lint]
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [ubuntu-latest]
+        python-version: [3.6, 3.7, 3.8, 3.9, 3.10.0-alpha.5]
+    runs-on: ${{ matrix.os }}
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - uses: actions/cache@v2
+      with:
+        path: ~/.cache/pip
+        key: pip-test-${{ matrix.python-version }}-${{ matrix.os }}
+    - name: Install dependencies
+      run: pip install .[test,type_comments] coveralls
+    - name: Test with pytest
+      run: coverage run -m pytest
+    - name: Upload Coverage
+      run: coveralls --service=github
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        COVERALLS_FLAG_NAME: ${{ matrix.test-name }}
+        COVERALLS_PARALLEL: true
+
+  coveralls:
+    name: Finish Coveralls
+    needs: test
+    runs-on: ubuntu-latest
+    container: python:3-slim
+    steps:
+    - name: Finished
+      run: |
+        pip install coveralls
+        coveralls --service=github --finish
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/.github/workflows/publish.yml 
new/sphinx-autodoc-typehints-1.12.0/.github/workflows/publish.yml
--- old/sphinx-autodoc-typehints-1.11.0/.github/workflows/publish.yml   
1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-autodoc-typehints-1.12.0/.github/workflows/publish.yml   
2021-04-15 02:21:18.000000000 +0200
@@ -0,0 +1,27 @@
+name: Publish packages to PyPI
+
+on:
+  push:
+    tags:
+      - "[0-9]+.[0-9]+.[0-9]+"
+      - "[0-9]+.[0-9]+.[0-9]+[a-b][0-9]+"
+      - "[0-9]+.[0-9]+.[0-9]+rc[0-9]+"
+
+jobs:
+  publish:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Set up Python
+      uses: actions/setup-python@v2
+      with:
+        python-version: 3.x
+    - name: Install dependencies
+      run: pip install build
+    - name: Create packages
+      run: python -m build -s -w .
+    - name: Upload packages
+      uses: pypa/gh-action-pypi-publish@master
+      with:
+        user: __token__
+        password: ${{ secrets.pypi_password }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/.travis.yml 
new/sphinx-autodoc-typehints-1.12.0/.travis.yml
--- old/sphinx-autodoc-typehints-1.11.0/.travis.yml     2020-06-21 
08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/.travis.yml     1970-01-01 
01:00:00.000000000 +0100
@@ -1,64 +0,0 @@
-dist: xenial
-language: python
-python: "3.6"
-
-stages:
-  - name: static analysis
-  - name: test
-  - name: deploy to pypi
-    if: type = push AND tag =~ ^\d+\.\d+\.\d+
-
-jobs:
-  include:
-    - stage: static analysis
-      env: TOXENV=flake8
-
-    - stage: test
-      env: TOXENV=py35
-      python: "3.5.2"
-      after_success: &after_success
-        - pip install coveralls
-        - coveralls
-
-    - stage: test
-      env: TOXENV=py35
-      python: "3.5"
-      after_success: *after_success
-
-    - stage: test
-      env: TOXENV=py36
-      python: "3.6"
-      after_success: *after_success
-
-    - stage: test
-      env: TOXENV=py37
-      python: "3.7"
-      after_success: *after_success
-
-    - stage: test
-      env: TOXENV=py38
-      python: "3.8"
-      after_success: *after_success
-
-    - stage: deploy to pypi
-      install: skip
-      script: skip
-      deploy:
-        provider: pypi
-        user: agronholm
-        password:
-          secure: 
duaV12IvSrtlrjcqkbOToB0YTQkFRMM3SADKPVL4JapNYbhGCHsNgauAptnIZrTIFy3B2ZQH5QxOu1xapR3LHbwCrh9VV6QYTU1BFV8ju5gTcnCWcuN0Sr42LuwB3v5sCjijMrNIfo04ovhgJKCPfOiFV3bsXv+PSUm221qLixG8vHmoP2Vqhb+8+McV/JeMMjxfMv/XFb3fWoQwaspERVu/Xt4f/taJ7JFNOJBjYYwYY79mxE6TJOTypgnrgypO0YyqjrvVsjFNuCH3QeQYtDIcJRTekp/Oo9hiNt6T4nuf3X09F9vKhFuGXtpmdwjnIktQb2jkP4FSHGJ3z/6UJP7yPgMXaFezzih5WjBVuMwDu9HOo4EHE+0hgkL5aQfbFulF2moE7PGEqhTWZkEzxGKc/ds+YbfYGigrcpuCm+KvDtQHAUkrIa8mEw5wM5+QGiiBGEzxZ6ifsZzxADEoCNshU3r6rHBWlA4ze5Q0PFCC7Jns2uqe51+9qqBz+cGKjQafn+1DwGBIr/tZusx8cjRJpsvZ116Zq7viCfzBmxEt4yA5UPYmpljS7bBSJrbrXVRNZGmAm9oO5adI99MnrQsDdVMM3KoC0R3JOmiGaKuM573am57EZ6c/hKKqyLs4MS6WLkYbygNPq3N0bQG6JKtvVKGPB1xTA116Mve6cJc=
-        distributions: sdist bdist_wheel
-        on:
-          tags: true
-
-install: pip install tox
-
-script: tox
-
-env:
-  global:
-    - COVERALLS_PARALLEL=true
-
-notifications:
-  webhooks: https://coveralls.io/webhook
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/CHANGELOG.rst 
new/sphinx-autodoc-typehints-1.12.0/CHANGELOG.rst
--- old/sphinx-autodoc-typehints-1.11.0/CHANGELOG.rst   2020-06-21 
08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/CHANGELOG.rst   2021-04-15 
02:21:18.000000000 +0200
@@ -1,224 +1,178 @@
-1.11.0
-======
+**1.12.0**
 
-* Dropped support for Sphinx < 3.0
-* Added support for alternative parameter names (``arg``, ``argument``, 
``parameter``)
-* Fixed import path for Signature (PR by Matthew Treinish)
-* Fixed ``TypeError`` when formatting a parametrized ``typing.IO`` annotation
-* Fixed data class displaying a return type in its ``__init__()`` method
+- Dropped Python 3.5 support
+- Added the simplify_optional_unions config option (PR by tillhainbach)
+- Fixed indentation of multiline strings (PR by Yuxin Wu)
 
+**1.11.1**
 
-1.10.3
-======
+- Changed formatting of ``None`` to point to the Python stdlib docs (PR by 
Dominic Davis-Foster)
+- Updated special dataclass handling (PR by Lihu Ben-Ezri-Ravin)
 
-* Fixed ``TypeError`` (or wrong rendered class name) when an annotation is a 
generic class that has
-  a ``name`` property
+**1.11.0**
 
+- Dropped support for Sphinx < 3.0
+- Added support for alternative parameter names (``arg``, ``argument``, 
``parameter``)
+- Fixed import path for Signature (PR by Matthew Treinish)
+- Fixed ``TypeError`` when formatting a parametrized ``typing.IO`` annotation
+- Fixed data class displaying a return type in its ``__init__()`` method
 
-1.10.2
-======
+**1.10.3**
 
-* Fixed inner classes missing their parent class name(s) when rendered
+- Fixed ``TypeError`` (or wrong rendered class name) when an annotation is a 
generic class that has
+  a ``name`` property
 
+**1.10.2**
 
-1.10.1
-======
+- Fixed inner classes missing their parent class name(s) when rendered
 
-* Fixed ``KeyError`` when encountering mocked annotations 
(``autodoc_mock_imports``)
+**1.10.1**
 
+- Fixed ``KeyError`` when encountering mocked annotations 
(``autodoc_mock_imports``)
 
-1.10.0
-======
+**1.10.0**
 
-* Rewrote the annotation formatting logic (fixes Python 3.5.2 compatibility 
regressions and an
+- Rewrote the annotation formatting logic (fixes Python 3.5.2 compatibility 
regressions and an
   ``AttributeError`` regression introduced in v1.9.0)
-* Fixed decorator classes not being processed as classes
+- Fixed decorator classes not being processed as classes
 
+**1.9.0**
 
-1.9.0
-=====
-
-* Added support for typing_extensions_
-* Added the ``typehints_document_rtype`` option (PR by Simon-Martin Schr??der)
-* Fixed metaclasses as annotations causing ``TypeError``
-* Fixed rendering of ``typing.Literal``
-* Fixed OSError when generating docs for SQLAlchemy mapped classes
-* Fixed unparametrized generic classes being rendered with their type 
parameters
+- Added support for typing_extensions_
+- Added the ``typehints_document_rtype`` option (PR by Simon-Martin Schr??der)
+- Fixed metaclasses as annotations causing ``TypeError``
+- Fixed rendering of ``typing.Literal``
+- Fixed OSError when generating docs for SQLAlchemy mapped classes
+- Fixed unparametrized generic classes being rendered with their type 
parameters
   (e.g. ``Dict[~KT, ~VT]``)
 
 .. _typing_extensions: https://pypi.org/project/typing-extensions/
 
+**1.8.0**
 
-1.8.0
-=====
-
-* Fixed regression which caused ``TypeError`` or ``OSError`` when trying to 
set annotations due to
+- Fixed regression which caused ``TypeError`` or ``OSError`` when trying to 
set annotations due to
   PR #87
-* Fixed unintentional mangling of annotation type names
-* Added proper ``:py:data`` targets for ``NoReturn``, ``ClassVar`` and 
``Tuple``
-* Added support for inline type comments (like ``(int, str) -> None``) (PR by 
Bern??t G??bor)
-* Use the native AST parser for type comment support on Python 3.8+
-
-
-1.7.0
-=====
-
-* Dropped support for Python 3.4
-* Fixed unwrapped local functions causing errors (PR by Kimiyuki Onaka)
-* Fixed ``AttributeError`` when documenting the ``__init__()`` method of a 
data class
-* Added support for type hint comments (PR by Markus Unterwaditzer)
-* Added flag for rendering classes with their fully qualified names (PR by 
Holly Becker)
+- Fixed unintentional mangling of annotation type names
+- Added proper ``:py:data`` targets for ``NoReturn``, ``ClassVar`` and 
``Tuple``
+- Added support for inline type comments (like ``(int, str) -> None``) (PR by 
Bern??t G??bor)
+- Use the native AST parser for type comment support on Python 3.8+
+
+**1.7.0**
+
+- Dropped support for Python 3.4
+- Fixed unwrapped local functions causing errors (PR by Kimiyuki Onaka)
+- Fixed ``AttributeError`` when documenting the ``__init__()`` method of a 
data class
+- Added support for type hint comments (PR by Markus Unterwaditzer)
+- Added flag for rendering classes with their fully qualified names (PR by 
Holly Becker)
 
+**1.6.0**
 
-1.6.0
-=====
-
-* Fixed ``TypeError`` when formatting annotations from a class that inherits 
from a concrete
+- Fixed ``TypeError`` when formatting annotations from a class that inherits 
from a concrete
   generic type (report and tests by bpeake-illuscio)
-* Added support for ``typing_extensions.Protocol`` (PR by Ian Good)
-* Added support for ``typing.NewType`` (PR by George Leslie-Waksman)
-
+- Added support for ``typing_extensions.Protocol`` (PR by Ian Good)
+- Added support for ``typing.NewType`` (PR by George Leslie-Waksman)
 
-1.5.2
-=====
+**1.5.2**
 
-* Emit a warning instead of crashing when an unresolvable forward reference is 
encountered in type
+- Emit a warning instead of crashing when an unresolvable forward reference is 
encountered in type
   annotations
 
+**1.5.1**
 
-1.5.1
-=====
-
-* Fixed escape characters in parameter default values getting lost during 
signature processing
-* Replaced use of the ``config-inited`` event (which inadvertently required 
Sphinx 1.8) with the
+- Fixed escape characters in parameter default values getting lost during 
signature processing
+- Replaced use of the ``config-inited`` event (which inadvertently required 
Sphinx 1.8) with the
   ``builder-inited`` event
 
+**1.5.0**
 
-1.5.0
-=====
-
-* The setting of the ``typing.TYPECHECKING`` flag is now configurable using the
+- The setting of the ``typing.TYPECHECKING`` flag is now configurable using the
   ``set_type_checking_flag`` option
 
+**1.4.0**
 
-1.4.0
-=====
-
-* The extension now sets ``typing.TYPECHECKING`` to ``True`` during setup to 
include conditional
+- The extension now sets ``typing.TYPECHECKING`` to ``True`` during setup to 
include conditional
   imports which may be used in type annotations
-* Fixed parameters with trailing underscores (PR by Daniel Knell)
-* Fixed KeyError with private methods (PR by Benito Palacios S??nchez)
-* Fixed deprecation warning about the use of formatargspec (PR by Y. Somda)
-* The minimum Sphinx version is now v1.7.0
-
-
-1.3.1
-=====
+- Fixed parameters with trailing underscores (PR by Daniel Knell)
+- Fixed KeyError with private methods (PR by Benito Palacios S??nchez)
+- Fixed deprecation warning about the use of formatargspec (PR by Y. Somda)
+- The minimum Sphinx version is now v1.7.0
 
-* Fixed rendering of generic types outside the typing module (thanks to Tim 
Poterba for the PR)
+**1.3.1**
 
+- Fixed rendering of generic types outside the typing module (thanks to Tim 
Poterba for the PR)
 
-1.3.0
-=====
+**1.3.0**
 
-* Fixed crash when processing docstrings from nested classes (thanks to 
dilyanpalauzov for the fix)
-* Added support for Python 3.7
-* Dropped support for Python 3.5.0 and 3.5.1
+- Fixed crash when processing docstrings from nested classes (thanks to 
dilyanpalauzov for the fix)
+- Added support for Python 3.7
+- Dropped support for Python 3.5.0 and 3.5.1
 
+**1.2.5**
 
-1.2.5
-=====
-
-* Ensured that ``:rtype:`` doesn't get joined with a paragraph of text
+- Ensured that ``:rtype:`` doesn't get joined with a paragraph of text
   (thanks to Bruce Merry for the PR)
 
+**1.2.4**
 
-1.2.4
-=====
-
-* Removed support for ``backports.typing`` as it has been removed from the PyPI
-* Fixed first parameter being cut out from class methods and static methods
+- Removed support for ``backports.typing`` as it has been removed from the PyPI
+- Fixed first parameter being cut out from class methods and static methods
   (thanks to Josiah Wolf Oberholtzer for the PR)
 
+**1.2.3**
 
-1.2.3
-=====
-
-* Fixed `process_signature()` clobbering any explicitly overridden signatures 
from the docstring
-
+- Fixed `process_signature()` clobbering any explicitly overridden signatures 
from the docstring
 
-1.2.2
-=====
+**1.2.2**
 
-* Explicitly prefix ``:class:``, ``:mod:`` et al with ``:py:``, in case ``py`` 
is not the default
+- Explicitly prefix ``:class:``, ``:mod:`` et al with ``:py:``, in case ``py`` 
is not the default
   domain of the project (thanks Monty Taylor)
 
+**1.2.1**
 
-1.2.1
-=====
-
-* Fixed `ValueError` when `getargspec()` encounters a built-in function
-* Fixed `AttributeError` when `Any` is combined with another type in a `Union`
+- Fixed `ValueError` when `getargspec()` encounters a built-in function
+- Fixed `AttributeError` when `Any` is combined with another type in a `Union`
   (thanks Davis Kirkendall)
 
+**1.2.0**
 
-1.2.0
-=====
-
-* Fixed compatibility with Python 3.6 and 3.5.3
-* Fixed ``NameError`` when processing signatures of wrapped functions with 
type hints
-* Fixed handling of slotted classes with no ``__init__()`` method
-* Fixed Sphinx warning about parallel reads
-* Fixed return type being added to class docstring from its ``__init__()`` 
method
+- Fixed compatibility with Python 3.6 and 3.5.3
+- Fixed ``NameError`` when processing signatures of wrapped functions with 
type hints
+- Fixed handling of slotted classes with no ``__init__()`` method
+- Fixed Sphinx warning about parallel reads
+- Fixed return type being added to class docstring from its ``__init__()`` 
method
   (thanks to Manuel Krebber for the patch)
-* Fixed return type hints of ``@property`` methods being omitted (thanks to 
pknight for the patch)
-* Added a test suite (thanks Manuel Krebber)
-
-
-1.1.0
-=====
-
-* Added proper support for ``typing.Tuple`` (pull request by Manuel Krebber)
-
-
-1.0.6
-=====
-
-* Fixed wrong placement of ``:rtype:`` if a multi-line ``:param:`` or a 
``:returns:`` is used
-
-
-1.0.5
-=====
+- Fixed return type hints of ``@property`` methods being omitted (thanks to 
pknight for the patch)
+- Added a test suite (thanks Manuel Krebber)
 
-* Fixed coroutine functions' signatures not being processed when using 
sphinxcontrib-asyncio
+**1.1.0**
 
+- Added proper support for ``typing.Tuple`` (pull request by Manuel Krebber)
 
-1.0.4
-=====
+**1.0.6**
 
-* Fixed compatibility with Sphinx 1.4
+- Fixed wrong placement of ``:rtype:`` if a multi-line ``:param:`` or a 
``:returns:`` is used
 
+**1.0.5**
 
-1.0.3
-=====
+- Fixed coroutine functions' signatures not being processed when using 
sphinxcontrib-asyncio
 
-* Fixed "self" parameter not being removed from exception class constructor 
signatures
-* Fixed process_signature() erroneously removing the first argument of a 
static method
+**1.0.4**
 
+- Fixed compatibility with Sphinx 1.4
 
-1.0.2
-=====
+**1.0.3**
 
-* Fixed exception classes not being processed like normal classes
+- Fixed "self" parameter not being removed from exception class constructor 
signatures
+- Fixed process_signature() erroneously removing the first argument of a 
static method
 
+**1.0.2**
 
-1.0.1
-=====
+- Fixed exception classes not being processed like normal classes
 
-* Fixed errors caused by forward references not being looked up with the right 
globals
+**1.0.1**
 
+- Fixed errors caused by forward references not being looked up with the right 
globals
 
-1.0.0
-=====
+**1.0.0**
 
-* Initial release
+- Initial release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/PKG-INFO 
new/sphinx-autodoc-typehints-1.12.0/PKG-INFO
--- old/sphinx-autodoc-typehints-1.11.0/PKG-INFO        2020-06-21 
08:33:27.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/PKG-INFO        2021-04-15 
02:21:26.990801300 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: sphinx-autodoc-typehints
-Version: 1.11.0
+Version: 1.12.0
 Summary: Type hints (PEP 484) support for the Sphinx autodoc extension
 Home-page: UNKNOWN
 Author: Alex Gr??nholm
@@ -76,7 +76,13 @@
           be able to add type info.
         * ``typehints_document_rtype`` (default: ``True``): If ``False``, 
never add an ``:rtype:`` directive.
           If ``True``, add the ``:rtype:`` directive if no existing 
``:rtype:`` is found.
-        
+        * ``simplify_optional_unions`` (default: ``True``): If ``True``, 
optional parameters of type "Union[...]"
+          are simplified as being of type Union[..., None] in the resulting 
documention
+          (e.g. Optional[Union[A, B]] -> Union[A, B, None]).
+          If ``False``, the "Optional"-type is kept.
+          Note: If ``False``, **any** Union containing ``None`` will be 
displayed as Optional!
+          Note: If an optional parameter has only a single type (e.g 
Optional[A] or Union[A, None]),
+          it will **always** be displayed as Optional!
         
         How it works
         ------------
@@ -150,10 +156,11 @@
 Classifier: Topic :: Documentation :: Sphinx
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
-Requires-Python: >=3.5.2
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Requires-Python: >=3.6
 Provides-Extra: test
 Provides-Extra: type_comments
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/README.rst 
new/sphinx-autodoc-typehints-1.12.0/README.rst
--- old/sphinx-autodoc-typehints-1.11.0/README.rst      2020-06-21 
08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/README.rst      2021-04-15 
02:21:18.000000000 +0200
@@ -65,7 +65,13 @@
   be able to add type info.
 * ``typehints_document_rtype`` (default: ``True``): If ``False``, never add an 
``:rtype:`` directive.
   If ``True``, add the ``:rtype:`` directive if no existing ``:rtype:`` is 
found.
-
+* ``simplify_optional_unions`` (default: ``True``): If ``True``, optional 
parameters of type "Union[...]"
+  are simplified as being of type Union[..., None] in the resulting documention
+  (e.g. Optional[Union[A, B]] -> Union[A, B, None]).
+  If ``False``, the "Optional"-type is kept.
+  Note: If ``False``, **any** Union containing ``None`` will be displayed as 
Optional!
+  Note: If an optional parameter has only a single type (e.g Optional[A] or 
Union[A, None]),
+  it will **always** be displayed as Optional!
 
 How it works
 ------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/pre-commit-config.sample.yaml 
new/sphinx-autodoc-typehints-1.12.0/pre-commit-config.sample.yaml
--- old/sphinx-autodoc-typehints-1.11.0/pre-commit-config.sample.yaml   
1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-autodoc-typehints-1.12.0/pre-commit-config.sample.yaml   
2021-04-15 02:21:18.000000000 +0200
@@ -0,0 +1,24 @@
+# This is the configuration file for pre-commit (https://pre-commit.com/).
+# To use:
+# * Install pre-commit (https://pre-commit.com/#installation)
+# * Copy this file as ".pre-commit-config.yaml"
+# * Run "pre-commit install".
+repos:
+-   repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v3.4.0
+    hooks:
+    - id: check-toml
+    - id: debug-statements
+    - id: end-of-file-fixer
+    - id: mixed-line-ending
+      args: ["--fix=lf"]
+    - id: trailing-whitespace
+-   repo: https://github.com/pre-commit/mirrors-autopep8
+    rev: v1.5.6
+    hooks:
+    - id: autopep8
+-   repo: https://github.com/pycqa/isort
+    rev: 5.8.0
+    hooks:
+    - id: isort
+      additional_dependencies: [toml]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/pyproject.toml 
new/sphinx-autodoc-typehints-1.12.0/pyproject.toml
--- old/sphinx-autodoc-typehints-1.11.0/pyproject.toml  2020-06-21 
08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/pyproject.toml  2021-04-15 
02:21:18.000000000 +0200
@@ -5,3 +5,15 @@
     "wheel >= 0.29.0",
 ]
 build-backend = 'setuptools.build_meta'
+
+[tool.isort]
+skip_gitignore = true
+line_length = 99
+multi_line_output = 4
+
+[tool.autopep8]
+max_line_length = 99
+
+[tool.pytest.ini_options]
+addopts = "-rsx --tb=short"
+testpaths = ["tests"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/setup.cfg 
new/sphinx-autodoc-typehints-1.12.0/setup.cfg
--- old/sphinx-autodoc-typehints-1.11.0/setup.cfg       2020-06-21 
08:33:27.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/setup.cfg       2021-04-15 
02:21:26.990801300 +0200
@@ -18,14 +18,15 @@
        Topic :: Documentation :: Sphinx
        Programming Language :: Python
        Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.5
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
        Programming Language :: Python :: 3.8
+       Programming Language :: Python :: 3.9
+       Programming Language :: Python :: 3.10
 
 [options]
 py_modules = sphinx_autodoc_typehints
-python_requires = >=3.5.2
+python_requires = >=3.6
 install_requires = Sphinx >= 3.0
 
 [options.extras_require]
@@ -34,6 +35,7 @@
        typing_extensions >= 3.5
        dataclasses; python_version == "3.6"
        sphobjinv >= 2.0
+       Sphinx >= 3.2.0
 type_comments = 
        typed_ast >= 1.4.0; python_version < "3.8"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/PKG-INFO 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/PKG-INFO
--- 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/PKG-INFO  
    2020-06-21 08:33:27.000000000 +0200
+++ 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/PKG-INFO  
    2021-04-15 02:21:26.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: sphinx-autodoc-typehints
-Version: 1.11.0
+Version: 1.12.0
 Summary: Type hints (PEP 484) support for the Sphinx autodoc extension
 Home-page: UNKNOWN
 Author: Alex Gr??nholm
@@ -76,7 +76,13 @@
           be able to add type info.
         * ``typehints_document_rtype`` (default: ``True``): If ``False``, 
never add an ``:rtype:`` directive.
           If ``True``, add the ``:rtype:`` directive if no existing 
``:rtype:`` is found.
-        
+        * ``simplify_optional_unions`` (default: ``True``): If ``True``, 
optional parameters of type "Union[...]"
+          are simplified as being of type Union[..., None] in the resulting 
documention
+          (e.g. Optional[Union[A, B]] -> Union[A, B, None]).
+          If ``False``, the "Optional"-type is kept.
+          Note: If ``False``, **any** Union containing ``None`` will be 
displayed as Optional!
+          Note: If an optional parameter has only a single type (e.g 
Optional[A] or Union[A, None]),
+          it will **always** be displayed as Optional!
         
         How it works
         ------------
@@ -150,10 +156,11 @@
 Classifier: Topic :: Documentation :: Sphinx
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
-Requires-Python: >=3.5.2
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Requires-Python: >=3.6
 Provides-Extra: test
 Provides-Extra: type_comments
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/SOURCES.txt
 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/SOURCES.txt
--- 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/SOURCES.txt
   2020-06-21 08:33:27.000000000 +0200
+++ 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/SOURCES.txt
   2021-04-15 02:21:26.000000000 +0200
@@ -1,13 +1,17 @@
 .gitignore
-.travis.yml
 CHANGELOG.rst
 LICENSE
 README.rst
+pre-commit-config.sample.yaml
 pyproject.toml
 setup.cfg
 setup.py
 sphinx_autodoc_typehints.py
 tox.ini
+.github/ISSUE_TEMPLATE/bug_report.md
+.github/ISSUE_TEMPLATE/feature_request.md
+.github/workflows/codeqa-test.yml
+.github/workflows/publish.yml
 sphinx_autodoc_typehints.egg-info/PKG-INFO
 sphinx_autodoc_typehints.egg-info/SOURCES.txt
 sphinx_autodoc_typehints.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/requires.txt
 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/requires.txt
--- 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.egg-info/requires.txt
  2020-06-21 08:33:27.000000000 +0200
+++ 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.egg-info/requires.txt
  2021-04-15 02:21:26.000000000 +0200
@@ -4,6 +4,7 @@
 pytest>=3.1.0
 typing_extensions>=3.5
 sphobjinv>=2.0
+Sphinx>=3.2.0
 
 [test:python_version == "3.6"]
 dataclasses
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.py 
new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.py
--- old/sphinx-autodoc-typehints-1.11.0/sphinx_autodoc_typehints.py     
2020-06-21 08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/sphinx_autodoc_typehints.py     
2021-04-15 02:21:18.000000000 +0200
@@ -2,7 +2,7 @@
 import sys
 import textwrap
 import typing
-from typing import get_type_hints, TypeVar, Any, AnyStr, Tuple
+from typing import Any, AnyStr, Tuple, TypeVar, get_type_hints
 
 from sphinx.util import logging
 from sphinx.util.inspect import signature as Signature
@@ -72,17 +72,6 @@
     # Special cases
     if class_name in ('Pattern', 'Match') and hasattr(annotation, 'type_var'): 
 # Python < 3.7
         return annotation.type_var,
-    elif class_name == 'Callable' and hasattr(annotation, '__result__'):  # 
Python < 3.5.3
-        argtypes = (Ellipsis,) if annotation.__args__ is Ellipsis else 
annotation.__args__
-        return argtypes + (annotation.__result__,)
-    elif class_name == 'Union' and hasattr(annotation, '__union_params__'):  # 
Union on Python 3.5
-        return annotation.__union_params__
-    elif class_name == 'Tuple' and hasattr(annotation, '__tuple_params__'):  # 
Tuple on Python 3.5
-        params = annotation.__tuple_params__
-        if getattr(annotation, '__tuple_use_ellipsis__', False):
-            params += (Ellipsis,)
-
-        return params
     elif class_name == 'ClassVar' and hasattr(annotation, '__type__'):  # 
ClassVar on Python < 3.7
         return annotation.__type__,
     elif class_name == 'NewType' and hasattr(annotation, '__supertype__'):
@@ -95,10 +84,12 @@
     return getattr(annotation, '__args__', ())
 
 
-def format_annotation(annotation, fully_qualified: bool = False) -> str:
+def format_annotation(annotation,
+                      fully_qualified: bool = False,
+                      simplify_optional_unions: bool = True) -> str:
     # Special cases
     if annotation is None or annotation is type(None):  # noqa: E721
-        return '``None``'
+        return ':py:obj:`None`'
     elif annotation is Ellipsis:
         return '...'
 
@@ -114,7 +105,7 @@
         class_name = get_annotation_class_name(annotation, module)
         args = get_annotation_args(annotation, module, class_name)
     except ValueError:
-        return str(annotation)
+        return str(annotation).strip("'")
 
     # Redirect all typing_extensions types to the stdlib typing module
     if module == 'typing_extensions':
@@ -130,23 +121,72 @@
     if full_name == 'typing.NewType':
         args_format = '\\(:py:data:`~{name}`, 
{{}})'.format(name=annotation.__name__)
         role = 'func'
-    elif full_name == 'typing.Union' and len(args) == 2 and type(None) in args:
-        full_name = 'typing.Optional'
-        args = tuple(x for x in args if x is not type(None))  # noqa: E721
+    elif full_name == 'typing.Union' and type(None) in args:
+        if len(args) == 2:
+            full_name = 'typing.Optional'
+            args = tuple(x for x in args if x is not type(None))  # noqa: E721
+        elif not simplify_optional_unions:
+            full_name = 'typing.Optional'
+            args_format = 
'\\[:py:data:`{prefix}typing.Union`\\[{{}}]]'.format(prefix=prefix)
+            args = tuple(x for x in args if x is not type(None))  # noqa: E721
     elif full_name == 'typing.Callable' and args and args[0] is not ...:
-        formatted_args = '\\[\\[' + ', '.join(format_annotation(arg) for arg 
in args[:-1]) + ']'
-        formatted_args += ', ' + format_annotation(args[-1]) + ']'
+        formatted_args = '\\[\\[' + ', '.join(
+            format_annotation(
+                arg, simplify_optional_unions=simplify_optional_unions)
+            for arg in args[:-1]) + ']'
+        formatted_args += ', ' + format_annotation(
+            args[-1], simplify_optional_unions=simplify_optional_unions) + ']'
     elif full_name == 'typing.Literal':
         formatted_args = '\\[' + ', '.join(repr(arg) for arg in args) + ']'
 
     if args and not formatted_args:
-        formatted_args = args_format.format(', '.join(format_annotation(arg, 
fully_qualified)
-                                                      for arg in args))
+        formatted_args = args_format.format(', '.join(
+            format_annotation(arg, fully_qualified, simplify_optional_unions)
+            for arg in args))
 
     return ':py:{role}:`{prefix}{full_name}`{formatted_args}'.format(
         role=role, prefix=prefix, full_name=full_name, 
formatted_args=formatted_args)
 
 
+# reference: https://github.com/pytorch/pytorch/pull/46548/files
+def normalize_source_lines(sourcelines: str) -> str:
+    """
+    This helper function accepts a list of source lines. It finds the
+    indentation level of the function definition (`def`), then it indents
+    all lines in the function body to a point at or greater than that
+    level. This allows for comments and continued string literals that
+    are at a lower indentation than the rest of the code.
+    Arguments:
+        sourcelines: source code
+    Returns:
+        source lines that have been correctly aligned
+    """
+    sourcelines = sourcelines.split("\n")
+
+    def remove_prefix(text, prefix):
+        return text[text.startswith(prefix) and len(prefix):]
+
+    # Find the line and line number containing the function definition
+    for i, l in enumerate(sourcelines):
+        if l.lstrip().startswith("def"):
+            idx = i
+            break
+    else:
+        return "\n".join(sourcelines)
+    fn_def = sourcelines[idx]
+
+    # Get a string representing the amount of leading whitespace
+    whitespace = fn_def.split("def")[0]
+
+    # Add this leading whitespace to all lines before and after the `def`
+    aligned_prefix = [whitespace + remove_prefix(s, whitespace) for s in 
sourcelines[:idx]]
+    aligned_suffix = [whitespace + remove_prefix(s, whitespace) for s in 
sourcelines[idx + 1:]]
+
+    # Put it together again
+    aligned_prefix.append(fn_def)
+    return "\n".join(aligned_prefix + aligned_suffix)
+
+
 def process_signature(app, what: str, name: str, obj, options, signature, 
return_annotation):
     if not callable(obj):
         return
@@ -165,8 +205,20 @@
         for param in signature.parameters.values()
     ]
 
-    # The generated dataclass __init__() is weird and needs the second 
condition
-    if '<locals>' in obj.__qualname__ and not (what == 'method' and 
name.endswith('.__init__')):
+    # The generated dataclass __init__() and class are weird and need extra 
checks
+    # This helper function operates on the generated class and methods
+    # of a dataclass, not an instantiated dataclass object. As such,
+    # it cannot be replaced by a call to `dataclasses.is_dataclass()`.
+    def _is_dataclass(name: str, what: str, qualname: str) -> bool:
+        if what == 'method' and name.endswith('.__init__'):
+            # generated __init__()
+            return True
+        if what == 'class' and qualname.endswith('.__init__'):
+            # generated class
+            return True
+        return False
+
+    if '<locals>' in obj.__qualname__ and not _is_dataclass(name, what, 
obj.__qualname__):
         logger.warning(
             'Cannot treat a function defined as a local function: "%s"  (use 
@functools.wraps)',
             name)
@@ -257,7 +309,8 @@
         return children[0]
 
     try:
-        obj_ast = ast.parse(textwrap.dedent(inspect.getsource(obj)), 
**parse_kwargs)
+        obj_ast = ast.parse(textwrap.dedent(
+            normalize_source_lines(inspect.getsource(obj))), **parse_kwargs)
     except (OSError, TypeError):
         return {}
 
@@ -370,7 +423,9 @@
                 argname = '{}\\_'.format(argname[:-1])
 
             formatted_annotation = format_annotation(
-                annotation, 
fully_qualified=app.config.typehints_fully_qualified)
+                annotation,
+                fully_qualified=app.config.typehints_fully_qualified,
+                simplify_optional_unions=app.config.simplify_optional_unions)
 
             searchfor = [':{} {}:'.format(field, argname)
                          for field in ('param', 'parameter', 'arg', 
'argument')]
@@ -397,7 +452,9 @@
                 return
 
             formatted_annotation = format_annotation(
-                type_hints['return'], 
fully_qualified=app.config.typehints_fully_qualified)
+                type_hints['return'], 
fully_qualified=app.config.typehints_fully_qualified,
+                simplify_optional_unions=app.config.simplify_optional_unions
+            )
 
             insert_index = len(lines)
             for i, line in enumerate(lines):
@@ -427,6 +484,7 @@
     app.add_config_value('always_document_param_types', False, 'html')
     app.add_config_value('typehints_fully_qualified', False, 'env')
     app.add_config_value('typehints_document_rtype', True, 'env')
+    app.add_config_value('simplify_optional_unions', True, 'env')
     app.connect('builder-inited', builder_ready)
     app.connect('autodoc-process-signature', process_signature)
     app.connect('autodoc-process-docstring', process_docstring)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/tests/conftest.py 
new/sphinx-autodoc-typehints-1.12.0/tests/conftest.py
--- old/sphinx-autodoc-typehints-1.11.0/tests/conftest.py       2020-06-21 
08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/tests/conftest.py       2021-04-15 
02:21:18.000000000 +0200
@@ -1,7 +1,8 @@
 import os
-import sys
 import pathlib
+import re
 import shutil
+import sys
 
 import pytest
 from sphinx.testing.path import path
@@ -42,3 +43,12 @@
 @pytest.fixture
 def rootdir():
     return path(os.path.dirname(__file__) or '.').abspath() / 'roots'
+
+
+def pytest_ignore_collect(path, config):
+    version_re = re.compile(r'_py(\d)(\d)\.py$')
+    match = version_re.search(path.basename)
+    if match:
+        version = tuple(int(x) for x in match.groups())
+        if sys.version_info < version:
+            return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/tests/roots/test-dummy/conf.py 
new/sphinx-autodoc-typehints-1.12.0/tests/roots/test-dummy/conf.py
--- old/sphinx-autodoc-typehints-1.11.0/tests/roots/test-dummy/conf.py  
2020-06-21 08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/tests/roots/test-dummy/conf.py  
2021-04-15 02:21:18.000000000 +0200
@@ -1,7 +1,6 @@
 import pathlib
 import sys
 
-
 # Make dummy_module.py available for autodoc.
 sys.path.insert(0, str(pathlib.Path(__file__).parent))
 
@@ -12,4 +11,4 @@
     'sphinx.ext.autodoc',
     'sphinx.ext.napoleon',
     'sphinx_autodoc_typehints',
-    ]
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/tests/roots/test-dummy/dummy_module.py 
new/sphinx-autodoc-typehints-1.12.0/tests/roots/test-dummy/dummy_module.py
--- old/sphinx-autodoc-typehints-1.11.0/tests/roots/test-dummy/dummy_module.py  
2020-06-21 08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/tests/roots/test-dummy/dummy_module.py  
2021-04-15 02:21:18.000000000 +0200
@@ -1,13 +1,8 @@
 import typing
+from dataclasses import dataclass
 from mailbox import Mailbox
 from typing import Callable, Union
 
-try:
-    from dataclasses import dataclass
-except ImportError:
-    def dataclass(cls):
-        return cls
-
 
 def get_local_function():
     def wrapper(self) -> str:
@@ -185,6 +180,16 @@
         """
         return 42
 
+    def method_without_typehint(self, x):
+        """
+        Method docstring.
+        """
+        # test that multiline str can be correctly indented
+        multiline_str = """
+test
+"""
+        return multiline_str
+
 
 def function_with_typehint_comment_not_inline(x=None, *y, z, **kwargs):
     # type: (Union[str, bytes], *str, bytes, **int) -> None
@@ -239,6 +244,8 @@
 class DataClass:
     """Class docstring."""
 
+    x: int
+
 
 class Decorator:
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/sphinx-autodoc-typehints-1.11.0/tests/test_sphinx_autodoc_typehints.py 
new/sphinx-autodoc-typehints-1.12.0/tests/test_sphinx_autodoc_typehints.py
--- old/sphinx-autodoc-typehints-1.11.0/tests/test_sphinx_autodoc_typehints.py  
2020-06-21 08:33:11.000000000 +0200
+++ new/sphinx-autodoc-typehints-1.12.0/tests/test_sphinx_autodoc_typehints.py  
2021-04-15 02:21:18.000000000 +0200
@@ -4,20 +4,15 @@
 import textwrap
 import typing
 from typing import (
-    Any, AnyStr, Callable, Dict, Generic, Mapping, NewType, Optional, Pattern, 
Match, Tuple,
-    TypeVar, Union, Type)
+    IO, Any, AnyStr, Callable, Dict, Generic, Mapping, Match, NewType, 
Optional, Pattern, Tuple,
+    Type, TypeVar, Union)
 
 import pytest
 import typing_extensions
 
 from sphinx_autodoc_typehints import (
-    format_annotation, process_docstring, get_annotation_module, 
get_annotation_class_name,
-    get_annotation_args)
-
-try:
-    from typing import IO
-except ImportError:
-    from typing.io import IO
+    format_annotation, get_annotation_args, get_annotation_class_name, 
get_annotation_module,
+    process_docstring)
 
 T = TypeVar('T')
 U = TypeVar('U', covariant=True)
@@ -98,7 +93,7 @@
 @pytest.mark.parametrize('annotation, expected_result', [
     (str,                           ':py:class:`str`'),
     (int,                           ':py:class:`int`'),
-    (type(None),                    '``None``'),
+    (type(None),                    ':py:obj:`None`'),
     (type,                          ':py:class:`type`'),
     (Type,                          ':py:class:`~typing.Type`'),
     (Type[A],                       
':py:class:`~typing.Type`\\[:py:class:`~%s.A`]' % __name__),
@@ -126,11 +121,15 @@
     (Union,                         ':py:data:`~typing.Union`'),
     (Union[str, bool],              
':py:data:`~typing.Union`\\[:py:class:`str`, '
                                     ':py:class:`bool`]'),
+    (Union[str, bool, None],        
':py:data:`~typing.Union`\\[:py:class:`str`, '
+                                    ':py:class:`bool`, :py:obj:`None`]'),
     pytest.param(Union[str, Any],   
':py:data:`~typing.Union`\\[:py:class:`str`, '
                                     ':py:data:`~typing.Any`]',
                  marks=pytest.mark.skipif((3, 5, 0) <= sys.version_info[:3] <= 
(3, 5, 2),
                                           reason='Union erases the str on 
3.5.0 -> 3.5.2')),
     (Optional[str],                 
':py:data:`~typing.Optional`\\[:py:class:`str`]'),
+    (Optional[Union[str, bool]],    
':py:data:`~typing.Union`\\[:py:class:`str`, '
+                                    ':py:class:`bool`, :py:obj:`None`]'),
     (Callable,                      ':py:data:`~typing.Callable`'),
     (Callable[..., int],            ':py:data:`~typing.Callable`\\[..., 
:py:class:`int`]'),
     (Callable[[int], int],          
':py:data:`~typing.Callable`\\[\\[:py:class:`int`], '
@@ -138,7 +137,7 @@
     (Callable[[int, str], bool],    
':py:data:`~typing.Callable`\\[\\[:py:class:`int`, '
                                     ':py:class:`str`], :py:class:`bool`]'),
     (Callable[[int, str], None],    
':py:data:`~typing.Callable`\\[\\[:py:class:`int`, '
-                                    ':py:class:`str`], ``None``]'),
+                                    ':py:class:`str`], :py:obj:`None`]'),
     (Callable[[T], T],              ':py:data:`~typing.Callable`\\[\\[\\~T], 
\\~T]'),
     (Pattern,                       ':py:class:`~typing.Pattern`'),
     (Pattern[str],                  
':py:class:`~typing.Pattern`\\[:py:class:`str`]'),
@@ -158,6 +157,27 @@
     result = format_annotation(annotation)
     assert result == expected_result
 
+    # Test with the "simplify_optional_unions" flag turned off:
+    if re.match(r'^:py:data:`~typing\.Union`\\\[.*``None``.*\]', 
expected_result):
+        # strip None - argument and copy string to avoid conflicts with
+        # subsequent tests
+        expected_result_not_simplified = expected_result.replace(', ``None``', 
'')
+        # encapsulate Union in typing.Optional
+        expected_result_not_simplified = ':py:data:`~typing.Optional`\\[' + \
+            expected_result_not_simplified
+        expected_result_not_simplified += ']'
+        assert format_annotation(annotation, simplify_optional_unions=False) 
== \
+            expected_result_not_simplified
+
+        # Test with the "fully_qualified" flag turned on
+        if 'typing' in expected_result_not_simplified:
+            expected_result_not_simplified = 
expected_result_not_simplified.replace('~typing',
+                                                                               
     'typing')
+            assert format_annotation(annotation,
+                                     fully_qualified=True,
+                                     simplify_optional_unions=False) == \
+                expected_result_not_simplified
+
     # Test with the "fully_qualified" flag turned on
     if 'typing' in expected_result or __name__ in expected_result:
         expected_result = expected_result.replace('~typing', 'typing')
@@ -223,10 +243,14 @@
     assert 'Cannot resolve forward reference in type annotations of ' in 
warnings, warnings
 
     format_args = {}
-    if always_document_param_types:
-        format_args['undoc_params'] = '\n\n   Parameters:\n      **x** ("int") 
--'
-    else:
-        format_args['undoc_params'] = ""
+    for indentation_level in range(2):
+        key = f'undoc_params_{indentation_level}'
+        if always_document_param_types:
+            format_args[key] = textwrap.indent(
+                '\n\n   Parameters:\n      **x** ("int") --', '   ' * 
indentation_level
+            )
+        else:
+            format_args[key] = ''
 
     text_path = pathlib.Path(app.srcdir) / '_build' / 'text' / 'index.txt'
     with text_path.open('r') as f:
@@ -250,7 +274,7 @@
 
               Inner class.
 
-              _InnerClass__dunder_inner_method(x)
+              __dunder_inner_method(x)
 
                  Dunder inner method.
 
@@ -270,7 +294,7 @@
                  Return type:
                     "str"
 
-           _Class__dunder_method(x)
+           __dunder_method(x)
 
               Dunder method docstring.
 
@@ -423,6 +447,10 @@
               Return type:
                  "int"
 
+           method_without_typehint(x)
+
+              Method docstring.
+
         dummy_module.function_with_typehint_comment_not_inline(x=None, *y, z, 
**kwargs)
 
            Function docstring.
@@ -469,18 +497,18 @@
 
         dummy_module.undocumented_function(x)
 
-           Hi{undoc_params}
+           Hi{undoc_params_0}
 
            Return type:
               "str"
 
-        class dummy_module.DataClass
+        class dummy_module.DataClass(x)
 
-           Class docstring.
+           Class docstring.{undoc_params_0}
 
-           __init__()
+           __init__(x)
 
-              Initialize self.  See help(type(self)) for accurate signature.
+              Initialize self.  See help(type(self)) for accurate 
signature.{undoc_params_1}
 
         @dummy_module.Decorator(func)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/sphinx-autodoc-typehints-1.11.0/tox.ini 
new/sphinx-autodoc-typehints-1.12.0/tox.ini
--- old/sphinx-autodoc-typehints-1.11.0/tox.ini 2020-06-21 08:33:11.000000000 
+0200
+++ new/sphinx-autodoc-typehints-1.12.0/tox.ini 2021-04-15 02:21:18.000000000 
+0200
@@ -1,6 +1,6 @@
 [tox]
 minversion = 3.3.0
-envlist = py35, py36, py37, py38, flake8
+envlist = py36, py37, py38, py39, py310, flake8
 skip_missing_interpreters = true
 isolated_build = true
 

Reply via email to