Source code for all_in_one_restructuredtext

"""
This is the module-level docstring of the module :py:mod:`all_in_one_restructuredtext`.

The module's docstrings use reStructuredText markup.
"""

# TODO:
# - show roles to refer to elements
# - async with
# - async for
# - add example of numpy-style docstrings

import abc
from typing import TypeAlias, TypeVar, final

ParameterT = TypeVar("ParameterT")  #: Docstring of type ParameterT

ReturnT = TypeVar("ReturnT")
"""Docstring of type ReturnT."""

# Python 3.12: type MyType = list[float]  #: The docstring.
MyType: TypeAlias = list[float]  #: The docstring.

my_module_level_variable: MyType = [0.0, 1.1]  #: The docstring.


[docs] def my_function_pure_sphinx(*args, **kwargs): r''' This function accepts any number of arguments and keyword arguments. Note: If you do *not* use ``sphinx.ext.napoleon``: In the source code, the docstring for this function is a "raw" docstring using ``r"""..."""``, and ``*args`` and ``**kwargs`` below are escaped with a backslash (``\*args`` and ``\*\*kwargs``). See also https://github.com/sphinx-doc/sphinx/issues/9893. :param \*args: Variable length argument list. :param \*\*kwargs: Arbitrary keyword arguments. :return: None Text at end of docstring. ''' pass
[docs] def my_function_google_style(*args, **kwargs): r''' This function accepts any number of arguments and keyword arguments. Note: If you do *not* use ``sphinx.ext.napoleon``: In the source code, the docstring for this function is a "raw" docstring using ``r"""..."""``, and ``*args`` and ``**kwargs`` below are escaped with a backslash (``\*args`` and ``\*\*kwargs``). See also https://github.com/sphinx-doc/sphinx/issues/9893. Args: \*args: Variable length argument list. \*\*kwargs: Arbitrary keyword arguments. Returns: None Text at end of docstring. ''' pass
[docs] def my_function_needs_napoleon(*args, **kwargs): """ This function accepts any number of arguments and keyword arguments. Note: If you use ``sphinx.ext.napoleon`` (and only then), there is no need to escape ``*args`` and ``**kwargs`` below. Args: *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. Returns: None Text at end of docstring. """ pass
[docs] def my_function2(foo: int, bar: str): """ A simple function. Args: foo: A regular argument. bar: Another regular argument. Returns: None .. deprecated:: 2.0 Use :func:`my_function_pure_sphinx` instead. Text at end of docstring. """ pass
[docs] def my_generator(): """A generator. Yields: None """ yield None
[docs] class MyException(Exception): """Custom exception class.""" pass
[docs] class AllInOne: """This is a class that demonstrates various Python features. Uses Google-style docstrings (https://www.sphinx-doc.org/en/master/usage/extensions/example_google.html). Attributes: _my_property: A private property of the class. """ __metaclass__ = abc.ABCMeta def __init__(self): """Initialize the :py:class:`AllInOne` class.""" pass
[docs] def my_method( self, my_param: ParameterT = "default_value", /, *, keyword_only_param=None ) -> ReturnT: """A normal method. We are using both positional-only and keyword-only syntax. Here is some code in a literal block:: foo = True # assign ``True`` Note: Do not include the *self* parameter in the ``Args`` section. Args: my_param: Documenting *my_param*. Another sentence on the next docstring line, still belonging to *my_param*. keyword_only_param: Documenting *keyword_only_param*. Another sentence on the next docstring line, still belonging to *keyword_only_param*. Returns: The value of the local variable ``my_var``. Raises: :py:exc:`MyException`: if something went wrong. Example: >>> retval = my_method() # doctest format "return_value" Text at end of docstring. """ my_var: ReturnT = "return_value" return my_var
[docs] async def my_async_method(self, my_param: ParameterT = "default_value") -> ReturnT: """An :term:`async` method. Text at end of docstring. """ self.my_var: ReturnT = "return_value" return self.my_var
[docs] @abc.abstractmethod def my_abstractmethod(my_param: ParameterT = "default_value") -> ReturnT: """An abstract method. Text at end of docstring. """ my_var: ReturnT = "return_value" return my_var
[docs] @classmethod def my_classmethod(cls, my_param: ParameterT = "default_value") -> ReturnT: """A :any:`classmethod`. Text at end of docstring. """ my_var: ReturnT = "return_value" return my_var
[docs] @staticmethod def my_staticmethod(my_param: ParameterT = "default_value") -> ReturnT: """A :any:`staticmethod`. Text at end of docstring. """ my_var: ReturnT = "return_value" return my_var
@property def my_property(self): """ Getter for the private property :py:attr:`_my_property`. Returns: The value of :py:attr:`_my_property`. Text at end of docstring. """ return self._my_property @my_property.setter def my_property(self, value): """ Setter for the private property :py:attr:`_my_property`. Args: value: The value to set :py:attr:`_my_property` to. Text at end of docstring. """ self._my_property = value
[docs] def my_decorator_method(method): """ A decorator method that wraps the provided method. Args: method: The method to decorate. Returns: The decorated method. Text at end of docstring. """ def decorate_method(): """The decorated method.""" method() return decorate_method
[docs] @my_decorator_method def my_decorated_method(): """A method that is decorated by :py:meth:`my_decorator_method`.""" pass
[docs] @final class MyFinalClass: """A class that cannot be subclassed."""
[docs] @final def my_final_method(self) -> None: """A method that cannot be overridden by subclasses.""" pass
[docs] def my_decorator_function(function): """ A decorator function that wraps the provided function. Args: function: The function to decorate. Returns: The decorated function. Text at end of docstring. """ def decorate_function(): """The decorated function.""" function() return decorate_function
[docs] @my_decorator_function def my_decorated_function(): """ A function that is decorated by the :py:func:`my_decorator_function`. This docstring is not shown, just the one of ``decorate_function()``. """ pass