Skip to content

typehints_formatter not applied to signature #429

Closed
@aeisenbarth

Description

When type hints are shown in the signature, they are not passed through typehints_formatter.

Example

package
├── docs
│   ├── conf.py
│   └── index.rst
├── my_module
│   └── __init__.py
└── pyproject.toml

conf.py

extensions = [
    "sphinx.ext.autodoc",
    "sphinx.ext.napoleon",
    "sphinx_autodoc_typehints",
    "sphinx.ext.autosummary",
]

# sphinx.ext.napoleon
napoleon_use_rtype = typehints_use_rtype = False

# sphinx.ext.autodoc
# For this issue, this makes no difference regarding the signature, only regarding the description.
# Note that "description" and "both" add a separate "Return type" section which is also not
# formatted by typehints_formatter. 
autodoc_typehints = "both"

# sphinx.ext.autosummary
autosummary_generate = True

# sphinx_autodoc_typehints
typehints_document_rtype = False
typehints_use_signature = True
typehints_use_signature_return = True


def typehints_formatter(annotation, config):
    from typing import TypeVar

    if isinstance(annotation, TypeVar) and annotation.__name__ == "Unformatted":
        return "Formatted"

index.rst

.. autosummary::

   my_module.my_function

my_module/__init__.py

from typing import TypeVar

Unformatted = TypeVar("Unformatted")


def my_function(arg: Unformatted) -> Unformatted:
    """
    Do nothing

    Args:
        arg: An argument

    Returns:
        The argument returned
    """
    return arg

Expected behavior

  • Types are formatted everywhere:
    • Parameter types in signature (because typehints_use_signature = True)
    • Return type in signature (because typehints_use_signature_return = True)
    • Types in "Parameters" section of description (because autodoc_typehints = "both")
    • Types in "Returns" section of description (because autodoc_typehints = "both")
    • Types in "Return type" section of description, if shown (if napoleon_use_rtype = typehints_use_rtype = True)

Actual behavior

  • Parameter types in signature are not formatted.
  • Return type in signature is not formatted.

image

Versions

Platform:              linux; (Linux-5.15.0-91-generic-x86_64-with-glibc2.35)
Python version:        3.9.17 (main, Jul  5 2023, 20:41:20) 
[GCC 11.2.0])
Python implementation: CPython
Sphinx version:        7.2.6
Docutils version:      0.20.1
Jinja2 version:        3.1.2
Pygments version:      2.16.1
sphinx-autodoc-typehints: 2.0.0

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions