How to make Sphinx show Python 3 typing type hints next to the argument description instead of on the function signature?
Asked Answered
N

2

20

I am generating a HTML documentation of a Python 3 module automatically from its reStructuredText docstrings of its functions by using Sphinx (make HTML). The generated HTML documentation looks fine so far, but the parameter types of the function signatures, which are given in the source code as PEP484 type hints aren't shown correctly.

E.g. this is some example output from the Sphinx-generated HTML doc of one of my functions:

static parse_from_file(filename: str) → list
    Parses stuff from a text file.

    Parameters:  filename – the filepath of a textfile to be parsed
    Returns:     list of parsed elements

This is what I would expect it to look like:

static parse_from_file(filename)
    Parses stuff from a text file.

    Parameters:  filename (str) – the filepath of a textfile to be parsed
    Returns:     list of parsed elements
    Return type: list

This is how the Python code actually looks like:

def parse_from_file(filename: str) -> list:
    """Parses stuff from a text file.

    :param filename: the filepath of a textfile to be parsed
    :returns: list of parsed elements
    """
    return []

How can I make Sphinx show the Python 3 type hints correctly?

Naashom answered 16/10, 2016 at 14:45 Comment(2)
Putting the types in the docstring isn't an option? :param str filename: ... and :rtype: list for the return type...Ronnie
That would make it redundant and people in our project won't think about changing the types two times. Besides, it looks like Sphinx supports PEP484 type hints: github.com/sphinx-doc/sphinx/issues/1968Naashom
N
19

I tackled it on my own by using the sphinx-autodoc-typehints extension.

Naashom answered 19/10, 2016 at 7:27 Comment(1)
Might be worth noting that this extension currently doesn't work for classes without an __init__() in Python 3.6 - see my ticket.Lightship
A
19

There is autodoc_typehints variable. Since version 3.0 you can set it to 'description' which shows typehints as content of function or method and removes them from signature.

So just add this line into your conf.py:

autodoc_typehints = "description"
Absolutism answered 20/2, 2021 at 19:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.